0

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

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

expat 标识开始和结束标记,但转换 & lt; 小于字符和大于字符相同,因此解析如下:

结果:

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

而不是想要的:

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

我想得到理想的结果,我该如何防止外籍人士搞砸?

4

2 回答 2

2

expat 没有搞砸,&lt;只是字符的 XML 编码<。恰恰相反,如果 expat 会返回 literal &lt;,这将是 XML 规范的错误。话虽这么说,您当然可以使用以下方法获取转义版本xml.sax.saxutils.escape

>>> from xml.sax.saxutils import escape
>>> escape("<fail/>")
'&lt;fail/&gt;'

expat 解析器也可以自由地报告所有字符串数据,无论它看起来是否合适,因此您必须自己连接它们。

于 2009-07-17T18:49:20.477 回答
1

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

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

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

于 2009-07-17T21:37:28.717 回答