2013-10-03 33 views
1

我想从给定的XSD中检索属性列表。我能够获得几乎所有的属性简单和复杂的类型。但是我无法检索那些为其设置了扩展和复杂内容的模式元素的属性。我用XmlSchemaComplexContent和XmlSchemaComplexContentExtension类在c#中尝试了不同的东西,但可能是我没有正确使用它们,任何人都可以请我提供关于如何使用这些类或适当的xsd解析教程的指南。如何解析复杂类型中具有复杂内容和扩展名的XSD?

我想提取这些序列元素。

<xs:element name="xyz" type="xyz"/> 
<xs:complexType name="xyz"> 
<xs:complexContent> 
    <xs:extension base="robj"> 
    <xs:sequence> 
     <xs:element name="xyzHierarchy" type="rnb_v1_2:NList" /> 
     <xs:element name="Attributes" type="xyzOptions" /> 
     <xs:element name="Country" type="riD" /> 
     <xs:element name="CustomFields" /> 
     <xs:element name="DisplayName" type="xs:string" /> 
     <xs:element name="DisplayOrder" type="xs:int"/> 
      <xs:element name="Signature" type="xs:string" nillable="true"/> 

    </xs:extension> 
    </xs:complexContent> 

+0

你能请张贴给你提供问题的XSD片段,以及你想从中提取哪些信息清单? – MiMo

回答

1

我得到了答案。 我想与大家分享。 其中toFile是一个字符串类型 这里我只写了执行特定任务而不是整个代码的代码部分。 ///////////////////////////////////////////////// //////////////////////

private static void main(String[] args) 
if (complexType != null) 
        { 
         XmlSchemaParticle particle = complexType.Particle; 
         XmlSchemaSequence sequence = particle as XmlSchemaSequence; 
         toFile = toFile + "Complex " + complexType.Name; 
         toFile = toFile + "\n"; 
         if (complexType.ContentModel != null) 
         { 
          xmlComplexContent = (XmlSchemaComplexContent)complexType.ContentModel; 

          if (complexType != null) 
          { 
           extension = (XmlSchemaComplexContentExtension)xmlComplexContent.Content; 
           extension.BaseTypeName = complexType.QualifiedName; // base name 
           sequence =(XmlSchemaSequence) extension.Particle; 
           if (extension.BaseTypeName.Name != null) 
           { 

            if (sequence != null) 
            { 

             Out(extension.Particle); 
            } 
           } 

          } 
         } 

         else 
          Out(complexType.Particle); 
       } 
     System.IO.File.WriteAllText(@"C:\\Users\\KAMALPREETDEV\\Desktop\\attributes.txt", toFile); 

     } 

     private static void Out(XmlSchemaParticle particle) 
     { 
      XmlSchemaSequence sequence = particle as XmlSchemaSequence; 
      XmlSchemaChoice choice = particle as XmlSchemaChoice; 
      XmlSchemaAll all = particle as XmlSchemaAll; 

      if (sequence != null) 
      { 

       toFile = toFile + " Sequence"; 
       toFile = toFile + "\n"; 
       for (int i = 0; i < sequence.Items.Count; i++) 
       { 
        XmlSchemaElement childElement = sequence.Items[i] as XmlSchemaElement; 
        XmlSchemaSequence innerSequence = sequence.Items[i] as XmlSchemaSequence; 
        XmlSchemaChoice innerChoice = sequence.Items[i] as XmlSchemaChoice; 
        XmlSchemaAll innerAll = sequence.Items[i] as XmlSchemaAll; 

        if (childElement != null) 
        { 

         toFile = toFile + " Element/Type: " + childElement.Name + "/" + childElement.SchemaTypeName.Name; 
         toFile = toFile + "\n"; 
        } 
        else Out(sequence.Items[i] as XmlSchemaParticle); 
       } 
      }