【问题标题】:ParseError: undefined entity while parsing XML file in PythonParseError:在 Python 中解析 XML 文件时未定义的实体
【发布时间】:2020-06-29 22:42:08
【问题描述】:

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

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

这是我的 Python 代码

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

【问题讨论】:

  • 正如错误消息告诉您的那样,&amp;0uml; 不是标准的 XML 实体,因此您的 XML 无效,因此出现错误。请参阅xml.com/pub/a/98/08/xmlqna2.html 不确定是否可以将它们声明到 XML 文件之外的 ElementTree。
  • 请提供完整的错误信息。
  • @AMC 完成。谢谢

标签: python xml elementtree xml.etree character-entities


【解决方案1】:

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 是个不错的选择。

【讨论】:

    猜你喜欢
    • 2011-04-17
    • 1970-01-01
    • 1970-01-01
    • 2013-01-19
    • 2011-06-14
    • 2011-11-06
    • 2012-09-03
    • 1970-01-01
    • 2015-02-21
    相关资源
    最近更新 更多