我有以下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位。
这条线有什么问题?
答案 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中以查看包中的数据流。