ParseError: undefined entity while parsing XML file in Python
ParseError: undefined entity while parsing XML file in Python
我有一个包含多个 article
节点的大 XML 文件。我只包含了一个问题。我尝试在 Python 中解析它以过滤一些数据,但出现错误
File "<string>", line unknown
ParseError: undefined entity Ö: 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 Ö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>
根据我在 Google 中的搜索,我发现如果节点名称有问题,就会出现这种错误。然而,错误的行是文本中的第二个author
。
这是我的Python代码
with open('xaa.xml', 'r') as xml_file:
xml_tree = etree.parse(xml_file)
Ouml
实体的声明大概在DTD中(dblp.dtd),但是ElementTree不支持外部DTD。 ElementTree 仅识别直接在 XML 文件中(在 "internal subset" 中)声明的实体。这是一个工作示例:
<?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 Ö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 文件,您需要更强大的 XML 支持外部 DTD 的库。 lxml 是个不错的选择。
我有一个包含多个 article
节点的大 XML 文件。我只包含了一个问题。我尝试在 Python 中解析它以过滤一些数据,但出现错误
File "<string>", line unknown
ParseError: undefined entity Ö: 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 Ö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>
根据我在 Google 中的搜索,我发现如果节点名称有问题,就会出现这种错误。然而,错误的行是文本中的第二个author
。
这是我的Python代码
with open('xaa.xml', 'r') as xml_file:
xml_tree = etree.parse(xml_file)
Ouml
实体的声明大概在DTD中(dblp.dtd),但是ElementTree不支持外部DTD。 ElementTree 仅识别直接在 XML 文件中(在 "internal subset" 中)声明的实体。这是一个工作示例:
<?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 Ö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 文件,您需要更强大的 XML 支持外部 DTD 的库。 lxml 是个不错的选择。