根级别的数据无效

时间:2011-04-21 19:11:49

标签: c# .net xml

我有以下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位。

这条线有什么问题?

3 个答案:

答案 0 :(得分:93)

此:

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

应该是:

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

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

答案 1 :(得分:17)

记录:

“根级别的数据无效”表示您试图解析不是XML文档的内容。它甚至启动看起来像一个XML文档。它通常意味着你发现的东西:你正在解析类似字符串“C:\ inetpub \ wwwroot \ mysite \ officelist.xml”。

答案 2 :(得分:1)

我发现我使用的示例在第一行有一个xml文档规范。我使用的是this blog entry的样式表,第一行是

<?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中以查看包中的数据流。