Проблемы с синтаксическим анализом сущности lxml - PullRequest
2 голосов
/ 14 мая 2010

Я использую lxml следующим образом для анализа экспортированного файла XML из другой системы:

xmldoc = open(filename)
etree.parse(xmldoc)

Но я получаю:

lxml.etree.XMLSyntaxError: Entity «eacute» не определено, строка 4495, колонка 46

Очевидно, что у него проблемы с именами юникод-сущностей, но как мне обойти это? Через open () или parse ()?

Редактировать: Я забыл включить свой DTD в ту же папку - он там сейчас и имеет следующее объявление:

<!ENTITY eacute "&#233;">

и упоминается (и всегда был) в xmldoc следующим образом:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE DScribeDatabase SYSTEM "foo.dtd">

И все же у меня все та же проблема ... нужно ли объявлять DTD также в Python?

1 Ответ

6 голосов
/ 14 мая 2010

eacute не является предопределенным объектом в XML. Чтобы включить ссылку на сущность &eacute; в файл XML, она должна иметь объявление <!DOCTYPE>, указывающее на DTD (например, DTD XHTML 1.0), который определяет сущность.

Если XML использует &eacute;, но не имеет <!DOCTYPE>, он не правильно сформирован, и систему, которая его экспортировала, необходимо исправить.

(Нет веской причины использовать ссылку на сущность для представления é в файле XML. Ссылка на символ * &#233; везде понимается без определений сущности, если файл не может просто включать необработанный UTF -8 é по некоторым причинам.)

...