0

我使用 lxml 读取具有如下结构的 xml 文件

    <domain>http://www.trademe.co.nz</domain>         
    <start>http://www.trademe.co.nz/Browse/CategoryAttributeSearchResults.aspx?search=1&cid=5748&sidebar=1&rptpath=350-5748-4233-&132=FLAT&134=&153=&29=&122=0&122=0&59=0&59=0&178=0&178=0&sidebarSearch_keypresses=0&sidebarSearch_suggested=0</start>

我的python代码是:

from lxml import etree

tree = etree.parse('metaWeb.xml') 

当我运行它时 entityref: expecting ';'出现错误

但是,当我在 xml 文件中删除 & 符号时,一切都很好。

我该如何解决这个错误?

4

2 回答 2

1

在您的 xml 文件中替换&&amp;,否则您的 xml 不符合 XML 标准。

于 2013-10-31T01:21:40.317 回答
1

问题是这不是有效的 XML。在 XML 中,&符号总是以实体引用开头,例如&#1234;字符U+04D2(aka Ӓ)、&quot;字符"或文档/DTD/schema 中定义的某些自定义实体。*

如果要将文字&放入字符串中,则必须将其替换为其他内容,通常是&amp;,这是 & 字符的字符实体引用。

因此,如果您确定文档中没有实际的实体引用,只有未转义的 & 符号,您可以非常简单地修复它:

with open('metaWeb.xml') as f:
    xml = f.read().replace('&', '&amp;')
tree = etree.fromstring(xml)

但是,如果可能的话,更好的解决方案是修复生成此错误 XML 的任何程序。


* 这有点误导,但很真实;数字字符引用实际上不是实体引用。此外,字符实体引用类似于&quot;&amp;与任何其他具有替换文本的引用相同,实体恰好由 XML/HTML 基础 DTD 隐式定义。但是lxml,像大多数 XML 软件一样,使用术语“实体引用”比标准稍微广泛一些。

于 2013-10-31T01:21:56.117 回答