如何从C#中的XML文件创建DataTable?

时间:2016-03-31 16:50:53

标签: c# sql-server xml datatable

我最近问了一个类似的问题,但事实证明我有错误的想法进入它,所以我问的问题的答案并不完全是我想要的。我有以下XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<items found="132" limit="1000">
    <sampleField>
        <att1>18
        </att1>
        <att2>4343
        </att2>
        <att3>94007961
        </att3>
        <att4>Test
        </att4>
        <att5>Example
        </att5>
   </sampleField>

   <sampleField>
        <att1>40
        </att1>
        <att2>8945
        </att2>
        <att3>94089741
        </att3>
        <att4>Test2
        </att4>
        <att5>Example2
        </att5>
   </sampleField>
</items>

我想创建一个DataTable(稍后将转换为SQL Server数据库表),列名称是其中一个<sampleField>元素的子标记名称。 <att#>元素的实际值应表示表中的不同行。该表应如下所示:

我怎样才能在C#中使用此XML文件创建此DataTable?我尝试了dataTable.ReadXML(),但收到了一条错误消息:DataTable does not support schema inference from Xml。我也尝试使用DataSet来解决这个错误,但它创建了两个不同的表。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您可以从表集合中访问所需的表

    DataSet ds=new DataSet();
    ds.ReadXml(@"XML PATH");
  var dataTable=  ds.Tables[1]

<强>更新

foreach (DataRow dataRow in dataTable.Rows)
  {
   foreach (var item in dataRow.ItemArray)
   {
    Console.WriteLine(item);
   }
  }

使用Linq 您也可以使用linq解析xml

var doc = XDocument.Load(@"a.xml");
    var table = from x in doc.Descendants("sampleField")
                select new
                {
                    Attr1 = x.Element("att1").Value,
                    Attr2 = x.Element("att2").Value,
                    Attr3 = x.Element("att3").Value,
                    Attr4 = x.Element("att4").Value,
                    Attr5 = x.Element("att5").Value,


                };