2

我正在使用 lxml 来解析从另一个系统导出的 XML 文件:

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

但我得到:

lxml.etree.XMLSyntaxError:未定义实体“eacute”,第 4495 行,第 46 列

显然,它在使用 unicode 实体名称时存在问题——但我该如何解决呢?通过 open() 还是 parse()?

编辑:我忘记将我的 DTD 包含在同一个文件夹中 - 它现在在那里并且具有以下声明:

<!ENTITY eacute "&#233;">

并且在 xmldoc 中被称为(并且一直是):

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

然而我仍然遇到同样的问题...... DTD 是否也需要在 Python 中声明?

4

1 回答 1

6

eacute不是 XML 中的预定义实体。要在 XML 文件中包含&eacute;实体引用,它必须具有<!DOCTYPE>指向定义实体的 DTD(例如 XHTML 1.0 DTD)的声明。

如果 XML 使用&eacute;但没有<!DOCTYPE>,则它的格式不正确,需要修复导出它的系统。

(没有充分的理由é在 XML 文件中使用实体引用来表示。如果文件由于某种原因&#233;不能简单地包含原始 UTF-8,则字符引用在没有实体定义的情况下随处可见。)é

于 2010-05-14T14:58:06.290 回答