根级数据无效。

64

我有以下的XML文档:

<?xml version="1.0" encoding="UTF-8"?>
<Offices id="0" enabled="false">
  <office />
</Offices>

当我尝试通过C#访问它:

XmlDocument doc = new XmlDocument();
doc.LoadXml(HttpContext.Current.Server.MapPath("officeList.xml"));

我遇到了这个错误:

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

这行代码有什么问题?


注意:尽管这个问题比我刚刚关闭的重复问题要旧,但后者更加直接。特别是,它没有使用HttpContext来混淆问题。 - John Saunders
2
我在Visual Studio的resx文件中遇到了这个错误,通过关闭Visual Studio并重新打开它来解决了问题。 - jag
检查 web.config 文件,我在文件开头有一个无效字符。 - niico
这个应该把重复的方向反过来。这个问题比较老,有更多的答案涵盖更多的情况,除了另一个问题也有的正确答案。 - TylerH
3个回答

113

这个:

doc.LoadXml(HttpContext.Current.Server.MapPath("officeList.xml"));

应该是:

doc.Load(HttpContext.Current.Server.MapPath("officeList.xml"));

LoadXml() 用于加载 XML 字符串,而不是文件名。


最后一行帮了我,我遇到了一个数据根错误,但是因为从项目中加载配置文件,所以不知道该怎么办,所以我使用了xmlDoc.Load(filePath),它起作用了!!!谢谢! - Anup Shah
XmlDocument.LoadXml() 方法可以加载一个 XML 字符串 XmlDocument.Load() 方法可以加载一个 XML 文件 - Anup Shah

25

声明:

"数据在根级别处无效"的意思是您尝试解析的内容不是XML文档。它甚至没有开始看起来像XML文档。通常这意味着您正在解析类似于字符串"C:\inetpub\wwwroot\mysite\officelist.xml"之类的内容。


...或者以xml文档规范行<? ... ?>开头,看起来对我们来说肯定像是一个xml文档,但不适用于XmlDocument.LoadXml(),请参阅Joseph Morgan的评论。 - Roland

1
我发现我使用的示例在第一行有一个XML文档规范。我使用了这篇博客文章中得到的样式表,第一行是


<?xmlversion="1.0"encoding="utf-8"?>

这是导致错误的行。当我删除了它,样式表以该行开头

<xsl:stylesheet version="1.0" xmlns:DTS="www.microsoft.com/SqlServer/Dts" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

我的转换起作用了。顺便说一下,那篇博客文章是我发现的第一个好的、易于理解的例子,尝试从SSIS包的XML定义中获取信息,但我必须修改示例中的路径,以适应我的SSIS 2008包,所以你可能也需要这样做。我还创建了一个版本来提取前置约束条件中的“流”。我的最终版本看起来像这样:
    <xsl:stylesheet version="1.0" xmlns:DTS="www.microsoft.com/SqlServer/Dts" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" encoding="utf-8" />
    <xsl:template match="/">
    <xsl:text>From,To~</xsl:text>
    <xsl:text>
</xsl:text>
    <xsl:for-each select="//DTS:PrecedenceConstraints/DTS:PrecedenceConstraint">
      <xsl:value-of select="@DTS:From"/>
      <xsl:text>,</xsl:text>
      <xsl:value-of select="@DTS:To"/>
       <xsl:text>~</xsl:text>
      <xsl:text>
</xsl:text>
    </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

他给了我一个带有波浪线作为行分隔符的CSV文件。我在文本编辑器中将其替换为换行符,然后导入Excel以便查看包中的数据流。


3
这实际上并不能回答这个问题。 - John Saunders
+1 提到了 XmlDocument.LoadXml() 方法的文档规范问题。我的问题和原问题一样,都是在调用 LoadXml() 时出现异常,现在已经解决了。 - Roland

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接