web-dev-qa-db-ja.com

XmlをDataTableに変換する

Datatableに挿入するXMLファイルがあります。 xmlファイルの形式は次のとおりです。

<userid ID="37729">
  <TestId ID="84" TimeRemaining="60" />
  <QuestId ID="1">
    <Answer1>
    </Answer1>
    <Answer2>B</Answer2>
    <Answer3>
    </Answer3>
    <Answer4>
    </Answer4>
  </QuestId>
</userid>

これを、次のようなデータテーブルに挿入します。

Question Id     Answer1      Answer2        Answer3        Answer4
1                 A                                         D

2                             B              C     

3                                            C                     

誰かが私がこれを達成するのを助けることができますか?.

10
Vijjendra

まず、必要な列を含むDataTableを作成し、次にLinq-to-XMLを介してデータを入力します。

Selectクエリを使用して各行を表すオブジェクトを作成し、次に各項目のDataRowを作成するための標準的なアプローチを使用できます...

class Quest
{
    public string Answer1;
    public string Answer2;
    public string Answer3;
    public string Answer4;
}

public static void Main()
{
    var doc = XDocument.Load("filename.xml");

    var rows = doc.Descendants("QuestId").Select(el => new Quest
    {
        Answer1 = el.Element("Answer1").Value,
        Answer2 = el.Element("Answer2").Value,
        Answer3 = el.Element("Answer3").Value,
        Answer4 = el.Element("Answer4").Value,
    });

    // iterate over the rows and add to DataTable ...

}
15
ColinE
DataSet ds = new DataSet();
ds.ReadXml(fileNamePath);
13
ShaneBlake

Visual C#.NETを使用してXMLデータをDataSetに読み込む方法 には、いくつかの詳細が含まれています。基本的に、オーバーロードされた DataSetメソッドReadXml を使用して、データをDataSetに取得できます。 XMLデータは最初のDataTableにあります。

DataTable.ReadXmlメソッド もあります。

2
DOK

このコードを使用できます(推奨)

 MemoryStream objMS = new MemoryStream();
 DataTable oDT = new DataTable();//Your DataTable which you want to convert
 oDT.WriteXml(objMS);
 objMS.Position = 0;
 XPathDocument result = new XPathDocument(objMS);

これは別の方法ですが、最初の例です。がおすすめ

StringWriter objSW = new StringWriter();
DataTable oDt = new DataTable();//Your DataTable which you want to convert
oDt.WriteXml(objSW);
string result = objSW.ToString();
1
yeasir007