我最近问了一个类似的问题,但事实证明我有错误的想法进入它,所以我问的问题的答案并不完全是我想要的。我有以下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来解决这个错误,但它创建了两个不同的表。有什么想法吗?
答案 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,
};