lxml unicode实体解析问题

时间:2010-05-14 14:53:03

标签: python xml unicode lxml

我正在使用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 个答案:

答案 0 :(得分:6)

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

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

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