根级别的数据无效[重复]
Posted
技术标签:
【中文标题】根级别的数据无效[重复]【英文标题】:Data at the root level is invalid [duplicate] 【发布时间】:2011-08-10 13:23:35 【问题描述】:我有以下 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
来解决问题。
我刚刚在 Visual Studio 中的 resx 文件上出现此错误,通过关闭 Visual Studio 并再次打开它已解决。
检查 web.config,我在它的开头有一个无效字符。
欺骗方向应该反过来。这一个比较老,除了另一个也有正确答案之外,还有更多的答案,涵盖了更多的案例。
【参考方案1】:
这个:
doc.LoadXml(HttpContext.Current.Server.MapPath("officeList.xml"));
应该是:
doc.Load(HttpContext.Current.Server.MapPath("officeList.xml"));
LoadXml()
用于加载 XML 字符串,而不是文件名。
【讨论】:
最后一行帮助了我,我遇到了数据根错误,但不知道从项目中加载配置文件,所以我使用了 xmlDoc.Load(filePath) 并且它起作用了!!!谢谢! XmlDocument.LoadXml() 加载 XML 字符串 XmlDocument.Load() 加载 XML 文件【参考方案2】:记录在案:
“根级别的数据无效”表示您试图解析非 XML 文档的内容。它甚至没有开始 看起来像一个 XML 文档。它通常意味着您发现的内容:您正在解析字符串“C:\inetpub\wwwroot\mysite\officelist.xml”之类的内容。
【讨论】:
... 或以 xml 文档规范行开头的内容 ... ?> 像往常一样,这对我们来说绝对看起来像一个 xml 文档,但不是 XmlDocument.LoadXml(),请参阅 Joseph Morgan 的评论【参考方案3】:我发现我使用的示例在第一行有一个 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 中以查看包中的数据流。
【讨论】:
这实际上并不能回答问题。 +1 用于提及 XmlDocument.LoadXml() 的文档规范行的问题。我的问题与原始问题有相同的例外,使用相同的 LoadXml() 调用,现在已解决。以上是关于根级别的数据无效[重复]的主要内容,如果未能解决你的问题,请参考以下文章