使用lxml get error EntityR读取xml文件

2024-10-01 04:44:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用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代码是:

^{pr2}$

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

但是,当我删除xml文件中的符号时,一切都正常。在

我怎样才能解决这个错误?在


Tags: 文件httpdomainwww错误xml结构start
2条回答

问题是这不是有效的XML。在XML中,&符号总是以entity reference开头,比如&#1234;代表字符U+04D2(又名Ӓ),字符&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软件一样,使用术语“实体引用”比标准稍微宽泛一些。在

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

相关问题 更多 >