【问题标题】:lxml unicode entity parse problemslxml unicode实体解析问题
【发布时间】:2011-02-19 13:48:21
【问题描述】:

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

【问题讨论】:

    标签: python xml unicode lxml


    【解决方案1】:

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

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

    (没有充分的理由在 XML 文件中使用实体引用来表示 é。如果文件不能简单地包含原始 UTF -8 é 出于某种原因。)

    【讨论】:

    • 我已尝试添加 dtd、文件,但没有添加缺少的 doctype。但我仍然得到同样的错误。
    • 确保您使用的是etree.XMLParser(load_dtd= True)(传递给etree.parse())以使其实际使用DTD。
    猜你喜欢
    • 2013-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-25
    • 2015-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多