2

我有一个包含多个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)
4

1 回答 1

2

实体的声明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是一个不错的选择。

于 2020-03-18T20:44:37.020 回答