我正在拉取网站的来源。然后我想提取它的特定部分。我的意图是使用 LINQ-to-XML 执行此操作。
但是,我在解析源代码时遇到错误:
XElement source = XElement.Load(reader);
问题似乎是对我没有的 namespace 的引用。我收到错误消息:'addthis' 是未声明的前缀。第 130 行,位置 51。
由于这一行:
<div class="addthis_toolbox addthis_pill_combo" addthis:url="http://www.foo.com/foo">
如果我删除那个,其他的就会发生。
事情是,我只关心这个 XML 文件的一部分——我不需要能够解析整个文件。我只想要它在 XElement 中,这样我就可以找到它的一部分。我有办法绕过解析错误吗?我需要一个通用的解决方案 - 我想解析文件,而不管任何 undeclared prefix
错误。
谢谢
最佳答案
此 XML 无效。
为了使用命名空间前缀(例如 addthis:
),必须声明命名空间,写成 xmlns:addthis="some URI"
.
一般来说,您不应该使用 XML 解析器来解析 HTML,因为 HTML 很可能是无效的 XML,出于这个原因和许多其他原因(未声明的实体、未转义的 JS、未闭合的标签)。
相反,使用 HTML Agility Pack .
关于xml - XElement.Load() 上出现 "undeclared prefix"错误的解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7557464/