2009-12-10 42 views
1

美好的一天。C#解析XML Schema(SimpleType)问题

我能处理的ComplexType如:

<xsd:element name="Prerequisite"> 
    <xsd:complexType> 
     <xsd:sequence> 
     <xsd:element name="Type" type="Prerequisite.Type.type" minOccurs="1" maxOccurs="1" /> 
     <xsd:element name="Miscellaneous" type="Prerequisite.Misc.type" minOccurs="0" maxOccurs="1" /> 
     </xsd:sequence> 
    </xsd:complexType> 
    </xsd:element> 

我的C#像下面这样:

// Get the sequence particle of the complex type. 
    XmlSchemaSequence sequence = complexType.ContentTypeParticle as XmlSchemaSequence; 

    if (sequence != null) 
    { 
     // Iterate over each XmlSchemaElement in the Items collection. 
     foreach (XmlSchemaElement childElement in sequence.Items) 
     { 
      Console.WriteLine("Element: {0}/{1}/{2}/{3}", 
           childElement.QualifiedName.Name, 
           childElement.SchemaTypeName.Name, 
           childElement.MinOccurs, 
           childElement.MaxOccurs); 
     } 
    } 

但我不知道如何处理的 “限购” 和 “枚举”? 你能否给我一些指导。提前致谢。

<xsd:simpleType name="SystemTypeEnum"> 
    <xsd:restriction base="xsd:string"> 
     <xsd:enumeration value="Etch" /> 
    </xsd:restriction> 
    </xsd:simpleType> 

XmlSchemaSequence - >我找不到类XmlSchemaRestriction的

XmlSchemaElement - >我找不到类XmlSchemaEnumeration太的。

:-(

=========================需要进一步的帮助,谢谢。======== ================

@foreach (XmlSchemaEnumerationFacet childEnumeration in ????);

我仍然不知道如何完成顶线。 能给我进一步帮助?

 XmlSchemaSimpleType simpleType = xsdType as XmlSchemaSimpleType; 
     Console.WriteLine("simpleType: {0}", xsdType.Name); 
     XmlSchemaSimpleTypeRestriction restriction = simpleType.Content as XmlSchemaSimpleTypeRestriction; 

     if (restriction != null) 
     { 

      Console.WriteLine("restriction : {0}", restriction.BaseTypeName.Name); 

      foreach (XmlSchemaEnumerationFacet childEnumeration in ????) 
      { 
       Console.WriteLine("Element: {0}", childEnumeration.Value); 
      } 
     } 
+0

谢谢Tomalak为“xml-shcema”添加了标签。 – 2009-12-10 08:19:18

回答

2
XmlSchemaSimpleType simpleType = xsdType as XmlSchemaSimpleType; 
    Console.WriteLine("simpleType: {0}", xsdType.Name); 
    XmlSchemaSimpleTypeRestriction restriction = simpleType.Content as XmlSchemaSimpleTypeRestriction; 

    if (restriction != null) 
    { 

     Console.WriteLine("restriction : {0}", restriction.BaseTypeName.Name); 

     foreach (XmlSchemaObject facet in restriction.Facets) 
     { 
      if (facet is XmlSchemaEnumerationFacet) 

      Console.WriteLine("Element: {0}", ((XmlSchemaEnumerationFacet)facet).Value); 
     } 
    } 
+0

解释你的代码的作用 – Zombie 2012-11-10 08:47:31