【问题标题】:Can't import xml to dataset if xmlnode has attribute?如果 xmlnode 具有属性,则无法将 xml 导入数据集?
【发布时间】:2009-12-13 06:44:42
【问题描述】:

我正在使用以下代码将 xml 文件读取到 c# 中的 datagridview:

newDataSet.ReadXml(filepath);
dataGridView3.DataSource = newDataSet;
dataGridView3.DataMember = "aaa";

我的 xml 文件如下所示:

<root>
   <aaa>
      <Param_1>1</Param_1>
      <Param_1>2</Param_1>
      <Param_1>3</Param_1>
   </aaa>
</root>

我可以毫无问题地将 xml 读取到数据集。然后我加了一些 属性到&lt;Param&gt; 节点,所以它变成了

<Param_1 size="2">1</Param_1>

数据集无法显示任何xml数据,有谁知道为什么?

另外,如果我将我的 xml 文件更改为:

<root>
   <Data_1>
    <Name>aaa</Name>
    <Params>
      <Param_1>1</Param_1>
      <Param_1>2</Param_1>
      <Param_1>3</Param_1>
    </Params>
   </Data_1>
</root>

是否仍然可以使用 DataSet 方法将它们读入 datagridview 或者我必须使用类似 linq 的东西?

如果我必须这样做,有人可以告诉我如何使用 linq 做到这一点吗?

【问题讨论】:

  • 由于某些原因,xml 文件显示不正确,我在这里使用“(”而不是“
  • 该死的,就是没弄好……对不起
  • 您的第三个 XML 块缺少结束 元素
  • 实际上,John 的编辑引入了一个错字。如果您查看 Alex 的评论,编辑中有 &lt;Data_1&gt; 标签而不是 &lt;aaa&gt;。但它没有/ - 这可能是也可能不是xml文件的问题。我猜不是,否则亚历克斯会得到XmlException
  • 其实,没有。我所做的只是缩进它。错字是原创的。

标签: c# xml linq


【解决方案1】:

我建议您将数据读取到 xml 文档并使用 XmlDataSource 而不是 DataSet 绑定到它。并验证结构是否适合绑定。查看您的评论(不是在 John 的编辑中,而是在您问题下的评论中,没有 / 符号应该在结束标记中:&lt;/Data_1&gt;

或将结构更改为您希望的任何结构,前提是它适合您进行绑定。之后就可以读取数据了:

DataSet ds = new DataSet();
ds.ReadXml("XMLFile1.xml", XmlReadMode.InferSchema);

关于Linq:可以从阅读Getting Started with LINQ in C#开始。但无论如何,您不应该创建复杂的 xml 结构 - 使其复杂会增加您处理它的大量工作。

【讨论】:

  • 您可以在 Visual Studio 中为您的 xml 生成架构(不在 Express 版中)。
  • 无论如何,要绑定数据,您需要一个更简单的结构,就像在您的第一个示例中一样。否则您将无法正确使用绑定。或者您需要编写自己的绑定代码。
  • 其实不传XmlReadMode.InferSchema参数也可以。总结一下:我想问题是你不能绑定你的复杂数据(在你的最后一个例子中),而不是数据集不能读取它。尝试在调试器中停止并查看数据集的内容 - 您会看到它在 3 个单独的表中加载了数据,这显然不是您想要做的。
【解决方案2】:

DataSet 不是使用 XML 的通用机制。如果 DataSet 不会生成 XML,那么您将无法导入该 XML。

【讨论】:

  • 错了。他们可以,但不是一般情况。
  • 这不是我刚才说的吗?一般情况是“通用... XML”。一般情况下不起作用。有效的是 DataSet 可以生成的任何 XML。这不包括 OP 提出的案例。
猜你喜欢
  • 2021-07-05
  • 2021-09-18
  • 2022-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-08
  • 2012-12-23
  • 1970-01-01
相关资源
最近更新 更多