我使用lxml来读取一个像bellow一样的结构的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 ';'
错误
然而,当我删除&amp;在xml文件中的符号,一切都很好。
我该如何解决这个错误?
答案 0 :(得分:1)
问题是这不是有效的XML。在XML中,&
符号总是以entity reference开头,如Ӓ
字符U+04D2
(又名Ӓ
),"
为字符"
,或您的文档/ DTD /架构中定义的某个自定义实体。*
如果要将文字&
放入字符串中,则必须将其替换为其他内容,通常为&
,这是&符号的字符实体引用。
因此,如果您确定文档中没有实际的实体引用,只是未转义的&符号,您可以非常简单地修复它:
with open('metaWeb.xml') as f:
xml = f.read().replace('&', '&')
tree = etree.fromstring(xml)
但是,如果可能的话,更好的解决方案是修复生成此错误XML的程序。
*这有点误导,相当真实;数字字符引用实际上不是实体引用。此外,像"
或&
这样的字符实体引用与具有替换文本的任何其他引用相同,实体恰好由XML / HTML基础DTD隐式定义。但是,与大多数XML软件一样,lxml
使用术语“实体引用”的范围略大于标准。
答案 1 :(得分:0)
将&
替换为xml文件中的&
,否则xml不符合XML标准。