private XElement BuildElementSchema(string elemName, NodeInfo nodeInfo, NodeInfo parentInfo) { XElement parent = (null == parentInfo) ? null : parentInfo.Schema; XElement seqElem = null; if (null != parent) { seqElem = parent.Element(xs + "sequence"); if (null == seqElem && null != parent) parent.AddFirst(seqElem = new XElement(xs + "sequence")); } else { seqElem = new XElement(xs + "sequence"); } var elemNameInfo = elemName + "Info"; var hasKids = null == nodeInfo || string.IsNullOrEmpty(nodeInfo.TypeGuess); var elem0 = new XElement(xs + "element", new XAttribute("name", elemName), new XAttribute("type", hasKids ? elemNameInfo : nodeInfo.TypeGuess)); if (null != nodeInfo && nodeInfo.Repeats) elem0.Add(new XAttribute("maxOccurs", "unbounded")); seqElem.Add(elem0); // add the ref to the existing sequence nodeInfo.Schema = new XElement(xs + "complexType", new XAttribute("name", elemNameInfo)); return hasKids ? nodeInfo.Schema : null; }
private XElement BuildAttributeSchema(string attrName, NodeInfo nodeInfo, NodeInfo parentInfo) { XElement parent = parentInfo.Schema; var elem0 = new XElement(xs + "attribute", new XAttribute("name", attrName.TrimStart('@')), new XAttribute("type", nodeInfo.TypeGuess ?? "xs:string")); if (null != parent) parent.Add(elem0); nodeInfo.Schema = elem0; return null; }