22

我刚刚遇到了使用XmlDocument.LoadXml.

应用程序崩溃,出现以下错误:

“根级别的数据无效。第 1 行,位置 1”

在检查了 XML 并没有发现任何问题后,我用谷歌搜索了一下,发现了一个可以使用的技巧,XmlDocument.Load而不是XmlDocument.LoadXml.

我已经尝试过了,而且效果很好。

我的问题是:这两种方法有什么区别,什么可能导致一种工作而另一种失败?

4

5 回答 5

39

XmlDocument.Load用于从流、TextReader、路径/URL 或 XmlReader 加载 XML。 XmlDocument.LoadXml用于加载包含在字符串中的 XML。

它们是加载 XML 的根本不同方式,具体取决于 XML 的实际存储位置。因此,听起来您对 XML 的位置使用了错误的方法。

于 2009-11-02T11:20:42.220 回答
25

您是否尝试使用XmlDocument.LoadXml并传入文件名?它不这样做 - 它假定您传入的字符串XML。所以你可以使用:

doc.LoadXml("<root><child /><root>");

或者

doc.Load("myfile.xml");

如果这没有帮助,你能展示你的失败和工作代码吗?您可以通过多种方式从使用更改LoadXmlLoad...

于 2009-11-02T11:20:53.013 回答
3

Load() 从某个源加载,而 LoadXml() 直接从字符串加载

于 2009-11-02T11:20:59.957 回答
3

假设您以正确的方式XmlDocument.Load使用此问题可能是由Byte Order Mark引起的。XmlDocument.LoadXml

这个其他问题可能有用。

于 2009-11-02T11:30:52.273 回答
0

应用程序因以下错误而崩溃:“根级别的数据无效。第 1 行,位置 1”我怀疑您的 xml 数据没有根级别:例如:

<area id="1">
  <candidate id="0">dataata</candidate>
</area>
<area id="2">
  <candidate id="0">dataataa</candidate>
</area>

您需要在底层之上至少有一个根级别。例如:

<areas>
  <area id="1">
    <candidate id="0">dataata</candidate>
  </area>
  <area id="2">
    <candidate id="0">dataataa</candidate>
  </area>
</areas>

所以请把一位母亲放在你的水平之上,让它成为所有孩子的祖母

于 2011-03-10T04:30:23.180 回答