2010-12-12 3 views
1

に私はXSDスキーマファイルを持っていると私は、スキーマファイルの要素と私のコンボボックスを埋めるために必要な取得...C# - XSDスキーマを解析 - すべての要素コンボボックス

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="auto"> 
     <xs:complexType> 
     <xs:sequence> 
      <!-- Znacka --> 
      <xs:element name="znacka" type="xs:string"/> 
      <!-- pocetOsob --> 
      <xs:element name="pocetOsob" type="xs:int"/> 
      <!-- maxRychlost --> 
      <xs:element name="maxRychlost"> 
       <xs:complexType> 
        <xs:simpleContent> 
        <xs:extension base="xs:decimal"> 
         <xs:attribute name="jednotka" type="xs:string"/> 
        </xs:extension> 
        </xs:simpleContent> 
       </xs:complexType> 
      </xs:element> 
      <!-- Motor --> 
      <xs:element name="motor"> 
       <xs:complexType> 
        <xs:sequence> 
        <xs:element name="vykon"> 
         <xs:complexType> 
          <xs:simpleContent> 
           <xs:extension base="xs:decimal"> 
           <xs:attribute name="jednotka" type="xs:string"/> 
           </xs:extension> 
          </xs:simpleContent> 
         </xs:complexType> 
        </xs:element> 
        </xs:sequence> 
        <xs:attribute name="vyrobni_cislo" type="xs:string"/> 
       </xs:complexType> 
      </xs:element> 
     </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 

誰もがどのようにそれを行うためのアイデアを持っていました? xpath経由で? 私は作業コードの半分を持っています...私は要素autoでメッセージを受け取りました。

String path = openSchema.FileName; 
XmlTextReader xsd_file = new XmlTextReader(path); 
XmlSchema schema = new XmlSchema(); 
schema = XmlSchema.Read(xsd_file, null); 

MessageBox.Show(schema.Items.Count.ToString()); 

foreach (XmlSchemaElement element in schema.Items) 
{ 
    elements.Items.Add(element.Name); 
    MessageBox.Show(element.Name); 
} 

ありがとうございました!

+0

は必須ですか、またはlinqのようなものを使用してもよろしいですか? – TheLukeMcCarthy

答えて

5
string xml = <your xml>; 
var xs = XNamespace.Get("http://www.w3.org/2001/XMLSchema"); 
var doc = XDocument.Parse(xml); 
// if you have a file: var doc = XDocument.Load(<path to xml file>) 
foreach(var element in doc.Descendants(xs + "element")) 
{ 
    Console.WriteLine(element.Attribute("name").Value); 
} 
// outputs: 
// auto 
// znacka 
// pocetOsob 
// maxRychlost 
// motor 
// vykon 
+0

華麗な、ありがとう! :) –