【问题标题】:XmlDocument.Load Vs XmlDocument.LoadXmlXmlDocument.Load 与 XmlDocument.LoadXml
【发布时间】:2016-06-27 22:10:19
【问题描述】:

我刚刚在使用XmlDocument.LoadXml 时遇到了问题。

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

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

在检查了 XML 并没有发现任何问题后,我搜索了一下,发现使用 XmlDocument.Load 而不是 XmlDocument.LoadXml 的提示。

我试过了,效果很好。

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

【问题讨论】:

    标签: c# xmldocument


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      doc.Load("myfile.xml");
      

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

      【讨论】:

      • 我正在使用 doc.LoadXml 方法。我有 xml 文件,其中还包含文档类型定义文件。 我把它放在了 xml 文件所在的 SoccerMatchPlus.dtd 中。使用 doc.LoadXml 方法时出现错误,例如找不到文件“C:\Windows\system32\SoccerMatchPlus.dtd”。为什么 doc.LoadXml 方法在 'C:\Windows\system32 文件夹中找到文件?我可以在运行时更改它的路径吗?
      • 我添加了标题为“给定编码中的字符无效”的问题,请查看我的问题。请帮助我找到给定问题的解决方案。 stackoverflow.com/questions/6829715/…
      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        这个other question 可能有用。

        【讨论】:

        • 是的,这个。我刚刚发现,在加载XmlDocument 之前,我不应该将byte[] 转换为string(即使我知道编码)。这就是确切的原因——我得到了 BOM 表。我将byte[] 加载到MemoryStream 中,一切都很好。
        【解决方案5】:

        应用程序因以下错误而崩溃:“根级别的数据无效。第 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>
        

        所以请把一位母亲放在你的最高层,让它成为所有孩子的祖母

        【讨论】:

        • 第 1 行,位置 1 是文档的开头。它还没有开始寻找结构有效性和文档级元素。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-03
        • 2010-09-12
        • 1970-01-01
        • 1970-01-01
        • 2011-05-25
        • 1970-01-01
        相关资源
        最近更新 更多