Shape ProcessParticle(XmlSchemaParticle xsp, Shape parent) { Shape s; if (xsp == XmlSchemaParticle.Empty) { return(null); } if (xsp is XmlSchemaElement) { s = ProcessParticleElement((XmlSchemaElement)xsp); } else if (xsp is XmlSchemaSequence) { s = ProcessParticleGroup((XmlSchemaSequence)xsp, BindingType.Sequence); } else if (xsp is XmlSchemaChoice) { s = ProcessParticleGroup((XmlSchemaChoice)xsp, BindingType.Choice); } else if (xsp is XmlSchemaAll) { s = ProcessParticleGroup((XmlSchemaAll)xsp, BindingType.All); } else //XmlSchemaAny { return(null); //Ignore Any in the content model } if (xsp.MaxOccurs > 1) { Shape rep = new Shape(s.Name, BindingType.Repeat); rep.AddSubShape(s); s = rep; } if (parent != null) { parent.AddSubShape(s); } return(s); }
public Shape GenerateFromSchema(XmlSchemaElement xse) { XmlQualifiedName xseName = xse.QualifiedName; XmlSchemaType schemaType = xse.ElementSchemaType; XmlSchemaComplexType complexType = schemaType as XmlSchemaComplexType; if (null != complexType) { XmlSchemaParticle particle = null; Shape rootShape = null; XmlSchemaContentType contentType = complexType.ElementDecl.ContentValidator.ContentType; switch (contentType) { case XmlSchemaContentType.Mixed: case XmlSchemaContentType.TextOnly: rootShape = new Shape(GenName(xseName) + "_Text", BindingType.Text); rootShape.AddParticle(xse); break; case XmlSchemaContentType.Empty: rootShape = new Shape(null, BindingType.Sequence); break; case XmlSchemaContentType.ElementOnly: particle = complexType.ContentTypeParticle; rootShape = ProcessParticle(particle, null); break; } Debug.Assert(rootShape != null); if (complexType.AttributeUses.Values.Count > 0) { if (rootShape.BindingType != BindingType.Sequence) { Shape s = new Shape(null, BindingType.Sequence); s.AddSubShape(rootShape); rootShape = s; } int pos = 0; string[] names = rootShape.SubShapeNames(); ICollection attributes = complexType.AttributeUses.Values; XmlSchemaAttribute[] xsaArray = new XmlSchemaAttribute[attributes.Count]; attributes.CopyTo(xsaArray, 0); Array.Sort(xsaArray, new XmlSchemaAttributeComparer()); foreach (XmlSchemaAttribute xsa in xsaArray) { string name = GenAttrName(xsa.QualifiedName, names); Shape attrShape = new Shape(name, BindingType.Attribute); attrShape.AddParticle(xsa); rootShape.AddAttrShapeAt(attrShape, pos++); } } if (rootShape.BindingType != BindingType.Text) { rootShape.Name = GenName(xseName); rootShape.ContainerDecl = xse; } return(rootShape); } else // simple type { Shape s = new Shape(GenName(xseName), BindingType.Text); s.AddParticle(xse); return(s); } }
Shape ProcessParticle(XmlSchemaParticle xsp, Shape parent) { Shape s; if (xsp == XmlSchemaParticle.Empty) { return null; } if (xsp is XmlSchemaElement) { s = ProcessParticleElement((XmlSchemaElement)xsp); } else if (xsp is XmlSchemaSequence) { s = ProcessParticleGroup((XmlSchemaSequence)xsp, BindingType.Sequence); } else if (xsp is XmlSchemaChoice) { s = ProcessParticleGroup((XmlSchemaChoice)xsp, BindingType.Choice); } else if (xsp is XmlSchemaAll) { s = ProcessParticleGroup((XmlSchemaAll)xsp, BindingType.All); } else { //XmlSchemaAny return null; //Ignore Any in the content model } if (xsp.MaxOccurs > 1) { Shape rep = new Shape(s.Name, BindingType.Repeat); rep.AddSubShape(s); s = rep; } if (parent != null) parent.AddSubShape(s); return s; }
public Shape GenerateFromSchema(XmlSchemaElement xse) { XmlQualifiedName xseName = xse.QualifiedName; XmlSchemaType schemaType = xse.ElementSchemaType; XmlSchemaComplexType complexType = schemaType as XmlSchemaComplexType; if (null != complexType) { XmlSchemaParticle particle = null; Shape rootShape = null; XmlSchemaContentType contentType = complexType.ElementDecl.ContentValidator.ContentType; switch (contentType) { case XmlSchemaContentType.Mixed: case XmlSchemaContentType.TextOnly: rootShape = new Shape(GenName(xseName) + "_Text", BindingType.Text); rootShape.AddParticle(xse); break; case XmlSchemaContentType.Empty: rootShape = new Shape(null, BindingType.Sequence); break; case XmlSchemaContentType.ElementOnly: particle = complexType.ContentTypeParticle; rootShape = ProcessParticle(particle, null); break; } Debug.Assert(rootShape != null); if (complexType.AttributeUses.Values.Count > 0) { if (rootShape.BindingType != BindingType.Sequence) { Shape s = new Shape(null, BindingType.Sequence); s.AddSubShape(rootShape); rootShape = s; } int pos = 0; string[] names = rootShape.SubShapeNames(); ICollection attributes = complexType.AttributeUses.Values; XmlSchemaAttribute[] xsaArray = new XmlSchemaAttribute[attributes.Count]; attributes.CopyTo(xsaArray, 0); Array.Sort(xsaArray, new XmlSchemaAttributeComparer()); foreach(XmlSchemaAttribute xsa in xsaArray) { string name = GenAttrName(xsa.QualifiedName, names); Shape attrShape = new Shape(name, BindingType.Attribute); attrShape.AddParticle(xsa); rootShape.AddAttrShapeAt(attrShape, pos++); } } if (rootShape.BindingType != BindingType.Text) { rootShape.Name = GenName(xseName); rootShape.ContainerDecl = xse; } return rootShape; } else { // simple type Shape s = new Shape(GenName(xseName), BindingType.Text); s.AddParticle(xse); return s; } }