func parseAnyElement(ns string, el *xmltree.Element) Element { var base Type = AnyType typeattr := el.Attr("", "type") if typeattr != "" { base = parseType(el.Resolve(typeattr)) } return Element{ Plural: parsePlural(el), Type: base, Wildcard: true, } }
func parseElement(ns string, el *xmltree.Element) Element { var doc annotation e := Element{ Name: el.ResolveDefault(el.Attr("", "name"), ns), Type: parseType(el.Resolve(el.Attr("", "type"))), Default: el.Attr("", "default"), Abstract: parseBool(el.Attr("", "abstract")), Nillable: parseBool(el.Attr("", "nillable")), Optional: (el.Attr("", "use") == "optional"), Plural: parsePlural(el), Scope: el.Scope, } walk(el, func(el *xmltree.Element) { if el.Name.Local == "annotation" { doc = doc.append(parseAnnotation(el)) } }) e.Doc = string(doc) e.Attr = el.StartElement.Attr return e }
func parseAttribute(ns string, el *xmltree.Element) Attribute { var a Attribute var doc annotation // Non-QName xml attributes explicitly do *not* have a namespace. if name := el.Attr("", "name"); strings.Contains(name, ":") { a.Name = el.Resolve(el.Attr("", "name")) } else { a.Name.Local = name } a.Type = parseType(el.Resolve(el.Attr("", "type"))) a.Default = el.Attr("", "default") a.Scope = el.Scope walk(el, func(el *xmltree.Element) { if el.Name.Local == "annotation" { doc = doc.append(parseAnnotation(el)) } }) a.Doc = string(doc) // Other attributes could be useful later. One such attribute is // wsdl:arrayType. a.Attr = el.StartElement.Attr return a }