【问题标题】:How can I create a DataTable from an XML file in C#?如何在 C# 中从 XML 文件创建 DataTable?
【发布时间】:2016-03-31 16:50:52
【问题描述】:

我最近问了一个类似的问题,但事实证明我的想法是错误的,所以我问的问题的答案并不是我想要的。我有以下 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 数据库表),其中列名是 &lt;sampleField&gt; 元素之一的子项的标记名。 &lt;att#&gt; 元素的实际值应代表表中的不同行。该表应如下所示:

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

【问题讨论】:

  • 您与之前的帖子相比有何变化?该代码之前工作过!!!
  • @jdweng 你是对的。它以前工作过。我试图通过以错误的方式打印出表格的结果来测试它(这让我觉得很愚蠢)。你对我另一个问题的回答是正确的。如果您想将您的评论作为答案,我会接受。

标签: c# sql-server xml datatable


【解决方案1】:

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

    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,


                };

【讨论】:

  • 如何打印此 DataTable 的行和列以查看它是否有效?
  • Visual Studio 调试器有一个很好的数据表查看器。暂停您的代码并将鼠标悬停在 dataTable 变量上,然后单击放大类以查看数据表内容的网格。
  • @esmoore68 我不知道。这是一个 Windows 服务项目(它没有 GUI)。这会改变 DataTable 的情况吗?
  • 只要你使用VS进行设计和调试,无论项目类型如何,都应该可以工作。
  • @esmoore68 你是救生员。这个答案和您的评论解决了我的问题。谢谢大家! VS调试器中的可视化工具很有帮助!
猜你喜欢
  • 2017-03-26
  • 2012-10-15
  • 2012-02-17
  • 1970-01-01
  • 2014-01-13
  • 2011-07-12
  • 1970-01-01
  • 2023-02-09
相关资源
最近更新 更多