2017-08-25 8 views
0

私はいくつかのテーブルを持つDataSetから生成されたXmlSchemaオブジェクトからデータを抽出しようとしています。下の例のXmlSchemaは完全な正しいスキーマとしてエクスポートされますが、どのようにトラバースするのかわかりません。 Itemは1つしかなく、Elementsは常に空です。 XmlSchemaオブジェクトのテーブル要素と列要素を取得するにはどうすればよいですか?XmlSchemaオブジェクトを適切にトラバースする

using System; 
using System.IO; 
using System.Data; 
using System.Collections; 
using System.Xml.Schema; 

public class Program 
{ 
    public static void Main() 
    { 
     DataTable table1 = new DataTable("patients"); 
     table1.Columns.Add("name"); 
     table1.Columns.Add("id", typeof(int)); 
     table1.Rows.Add("sam", 1); 
     table1.Rows.Add("mark", 2); 

     DataTable table2 = new DataTable("medications"); 
     table2.Columns.Add("id", typeof(int)); 
     table2.Columns.Add("medication"); 
     table2.Rows.Add(1, "atenolol"); 
     table2.Rows.Add(2, "amoxicillin"); 

     DataSet set = new DataSet("office"); 
     set.Tables.Add(table1); 
     set.Tables.Add(table2); 

     using (var reader = new StringReader(set.GetXmlSchema())) 
     using (var writer = new StringWriter()) 
     { 
      var schema = XmlSchema.Read(reader, (sender, args) => { }); 
      schema.Write(writer); 
      writer.Flush(); 
      Console.WriteLine(schema.Elements.Values.Count); 
      Console.WriteLine(writer.ToString()); 
     } 

     //Console.WriteLine(set.GetXmlSchema()); 
    } 
} 
+0

私はあなたが読者に何をしようとしてわからないとライター。 GetXmlSchema()はあなたが探しているものを与えるはずであり、残りのコードは必要ありません。 – lancew

+0

申し訳ありません私はそれを言い換えることができます – user433342

答えて

1

それはこのように動作し、なぜ私はわからないんだけど、これはあなたのスキーマ・オブジェクトが適切に満たされていることを証明している:

string s = set.GetXmlSchema(); 
using (TextReader w = new StringReader(s)) { 

    XmlSchema x = XmlSchema.Read(w, null); 
    XmlSchemaElement e = (XmlSchemaElement)x.Items[0]; 
    XmlSchemaComplexType t = (XmlSchemaComplexType)e.SchemaType; 
    XmlSchemaChoice c = (XmlSchemaChoice)t.Particle; 
    XmlSchemaElement e2 = (XmlSchemaElement)c.Items[0]; 
    Console.WriteLine(e2.Name); 
} 
+0

正確に私が探していたものは、グーグルでそれを見逃している必要があります。埋め込まれたMicrosoftのページは? – user433342

+0

私はしませんでした、私はデバッグ中にそれを見つけました。答えとしてマークしてくれてありがとう。自由にupvoteにも気をつけてください;) – lancew

関連する問題