XML解析expat在python处理数据中

时间:2009-07-17 18:44:05

标签: python xml parsing expat-parser

我正在尝试使用python expat解析XML文件。我的XML文件中有以下行:

<Action>&lt;fail/&gt;</Action>

expat标识开始和结束标记但转换&amp; LT;对于大于字符的小于字符和相同,因此解析它:

结果:

START 'Action'
DATA '<'
DATA 'fail/'
DATA '>'
END 'Action'

而不是所需的:

START 'Action'
DATA '&lt;fail/&gt;'
END 'Action'

我希望得到预期的结果,如何防止外籍人士搞砸?

2 个答案:

答案 0 :(得分:2)

expat不会搞砸,&lt;只是字符<的XML编码。恰恰相反,如果expat将返回文字&lt;,那么这将是关于XML规范的错误。话虽这么说,您当然可以使用xml.sax.saxutils.escape

来获取转义版本
>>> from xml.sax.saxutils import escape
>>> escape("<fail/>")
'&lt;fail/&gt;'

expat解析器也可以自由地报告它看起来适合的任何块的所有字符串数据,因此你必须自己连接它们。

答案 1 :(得分:0)

SAX和StAX解析器都可以以任何方便的方式自由分解字符串(尽管StAX有一个COALESCE模式,可以强制它为你组装片段)。

原因是在某些情况下通常可以编写软件流,而不必关心重新组装字符串片段的开销。

通常我会在变量中累积文本,并在看到下一个StartElement或EndElement事件时使用内容。此时,我还将累积文本变量重置为空。