2009-11-02 31 views
16

我刚刚遇到了使用XmlDocument.LoadXml的问题。XmlDocument.Load Vs XmlDocument.LoadXml

申请被撞毁,给了以下错误:

"Data at the root level is invalid. Line 1, position 1"

检查XML和发现不妥的地方后,我用Google搜索了一下,发现一个提示使用XmlDocument.Load而不是XmlDocument.LoadXml

我已经尝试过,它完美地工作。

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

回答

32

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

根据XML实际存储的位置,它们在加载XML方面有根本不同的方法。所以这听起来像是你的XML使用了错误的方法。

20

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

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

doc.Load("myfile.xml"); 

如果没有帮助,您可以显示你的失败,工作代码?有不同的方式,你可以从使用LoadXmlLoad改变......从某个源

+0

我使用doc.LoadXml方法的盛大隆重的母亲。我有xml文件,它也包含文档类型定义文件。 <!DOCTYPE SoccerMatchPlus SYSTEM“SoccerMatchPlus.dtd”>我把它放在了xml文件所在的SoccerMatchPlus.dtd中。使用doc.LoadXml方法时出现错误,例如找不到文件'C:\ Windows \ system32 \ SoccerMatchPlus.dtd'。为什么doc.LoadXml方法在'C:\ Windows \ system32'文件夹中找到该文件?我可以在运行时更改路径吗? – 2011-07-26 11:11:52

+0

@Rais:这听起来像你可能想开始一个新的问题... – 2011-07-26 11:13:44

+0

好吧我张贴我的问题,我认为你是对的。谢谢。 – 2011-07-26 11:17:02

2

负载()的负荷,而loadXML的()直接从字符串

3

负荷您使用XmlDocument.LoadXmlDocument.LoadXml在假设right这种问题可能是由Byte Order Mark造成的。

This other question may be useful。

+0

是的,这。我刚刚发现,困难的是,在加载'XmlDocument'之前,我不应该将'byte []'转换为'string'(即使我知道编码)。这是确切的原因 - 我得到BOM'd。我把'byte []'加载到'MemoryStream'中,而且一切都很好。 – 2013-11-01 15:37:28

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> 

所以请把一个母亲你的水平的顶部,使其所有儿童

+0

1号线,位置1是文件的开始。它还没有开始寻求结构有效性和文档级的要素。 – 2013-11-01 15:34:59

相关问题