ParseError: неопределенная сущность при разборе файла XML в Python - PullRequest
0 голосов
/ 18 марта 2020

У меня большой XML файл с несколькими article узлами. Я включил только один с проблемой. Я пытаюсь разобрать его в 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)

1 Ответ

1 голос
/ 18 марта 2020

Объявление объекта 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 в вопросе без ошибок, вам нужна более мощная библиотека XML, которая поддерживает внешние DTD. l xml - хороший выбор для этого.

...