lxml Unicode 实体解析问题

2 投票
1 回答
3364 浏览
提问于 2025-04-15 22:42

我正在使用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中声明吗?

1 个回答

6

eacute 在 XML 中并不是一个预定义的实体。如果想在 XML 文件中使用 &eacute; 这个实体引用,就必须有一个 <!DOCTYPE> 声明,指向一个 DTD(比如 XHTML 1.0 DTD),这个 DTD 定义了这个实体。

如果 XML 文件中使用了 &eacute;,但没有 <!DOCTYPE>,那么这个文件就不符合规范,导出这个文件的系统需要进行修复。

(其实在 XML 文件中使用实体引用来表示 é 并没有太大必要。如果文件不能直接包含原始的 UTF-8 é,那么字符引用 &#233; 在任何地方都是可以理解的。)

撰写回答