我使用 lxml 来解析从另一个系统导出的 XML 文件:
xmldoc = open(filename)
etree.parse(xmldoc)
但我得到:
lxml.etree.XMLSyntaxError: Entity 'eacute' not defined, line 4495, column 46
显然它在 unicode 实体名称方面存在问题 - 但我该如何解决这个问题呢?通过 open() 还是 parse()?
编辑:我忘记将我的 DTD 包含在同一个文件夹中 - 它现在就在那里并且具有以下声明:
<!ENTITY eacute "é">
并且在 xmldoc 中被这样引用(并且始终如此):
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE DScribeDatabase SYSTEM "foo.dtd">
但是我仍然遇到同样的问题...DTD 也需要在 Python 中声明吗?
最佳答案
eacute
不是 XML 中预定义的实体。包括 é
XML 文件中的实体引用,它必须具有 <!DOCTYPE>
指向定义实体的 DTD(例如 XHTML 1.0 DTD)的声明。
如果 XML 使用 é
但没有<!DOCTYPE>
,它的格式不正确,导出它的系统需要修复。
(没有充分的理由在 XML 文件中使用实体引用来表示 é
。如果文件不能简单地包含原始 UTF,则字符引用 é
在没有实体定义的情况下在任何地方都可以理解-8 é
由于某种原因。)
关于python - lxml unicode实体解析问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2835077/