ParseError:在Python中解析XML文件时未定义实体



我有一个包含几个article节点的大XML文件。我只包括了一个有问题的。我试图用Python解析它来过滤一些数据,但我得到了错误

File "<string>", line unknown
ParseError: undefined entity &Ouml;: line 90, column 17

XML文件的示例

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE dblp SYSTEM "dblp.dtd">
<dblp>
<article mdate="2019-10-25" key="tr/gte/TR-0146-06-91-165" publtype="informal">
<author>Alejandro P. Buchmann</author>
<author>M. Tamer &Ouml;zsu</author>
<author>Dimitrios Georgakopoulos</author>
<title>Towards a Transaction Management System for DOM.</title>
<journal>GTE Laboratories Incorporated</journal>
<volume>TR-0146-06-91-165</volume>
<month>June</month>
<year>1991</year>
<url>db/journals/gtelab/index.html#TR-0146-06-91-165</url>
</article>
</dblp>

从我在谷歌的搜索中,我发现如果节点名称有问题,就会出现这种错误。但是,出现错误的行是文本中的第二个author

这是我的Python代码

with open('xaa.xml', 'r') as xml_file:
xml_tree = etree.parse(xml_file)

Ouml实体的声明可能在DTD(dblp.DTD(中,但ElementTree不支持外部DTD。ElementTree只识别直接在XML文件中声明的实体(在"内部子集"中(。这是一个工作示例:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE dblp [
<!ENTITY Ouml 'Ö'>
]>
<dblp>
<article mdate="2019-10-25" key="tr/gte/TR-0146-06-91-165" publtype="informal">
<author>Alejandro P. Buchmann</author>
<author>M. Tamer &Ouml;zsu</author>
<author>Dimitrios Georgakopoulos</author>
<title>Towards a Transaction Management System for DOM.</title>
<journal>GTE Laboratories Incorporated</journal>
<volume>TR-0146-06-91-165</volume>
<month>June</month>
<year>1991</year>
<url>db/journals/gtelab/index.html#TR-0146-06-91-165</url>
</article>
</dblp>

为了在没有错误的情况下解析问题中的XML文件,您需要一个更强大的支持外部DTD的XML库。lxml是一个很好的选择。

Ouml看起来像一个标准的html5实体。在运行xml解析器之前,将它们转换为unicode字符可能会有所帮助。在python3.4+中,您可以使用html.unescape
from html import escape, unescape
textXML = re.sub("\&\w+\;", lambda x: escape(unescape(x.group(0))), text)

相关内容

  • 没有找到相关文章

最新更新