lxml Unicode 实体解析问题
我正在使用lxml库来解析从另一个系统导出的XML文件:
xmldoc = open(filename)
etree.parse(xmldoc)
但是我遇到了以下错误:
lxml.etree.XMLSyntaxError: 实体 'eacute' 未定义,行 4495,列 46
显然,它在处理unicode实体名称时遇到了问题——我该如何解决这个问题呢?是通过open()还是parse()?
编辑:我忘记把我的DTD文件放在同一个文件夹里——现在已经放好了,内容如下:
<!ENTITY eacute "é">
在xmldoc中是这样引用的(一直都是):
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE DScribeDatabase SYSTEM "foo.dtd">
但我仍然遇到同样的问题……DTD需要在Python中声明吗?
1 个回答
6
eacute
在 XML 中并不是一个预定义的实体。如果想在 XML 文件中使用 é
这个实体引用,就必须有一个 <!DOCTYPE>
声明,指向一个 DTD(比如 XHTML 1.0 DTD),这个 DTD 定义了这个实体。
如果 XML 文件中使用了 é
,但没有 <!DOCTYPE>
,那么这个文件就不符合规范,导出这个文件的系统需要进行修复。
(其实在 XML 文件中使用实体引用来表示 é
并没有太大必要。如果文件不能直接包含原始的 UTF-8 é
,那么字符引用 é
在任何地方都是可以理解的。)