我正在尝试使用python expat解析XML文件。我的XML文件中有以下行:
<Action><fail/></Action>
expat标识开始和结束标记但转换&amp; LT;对于大于字符的小于字符和相同,因此解析它:
结果:
START 'Action'
DATA '<'
DATA 'fail/'
DATA '>'
END 'Action'
而不是所需的:
START 'Action'
DATA '<fail/>'
END 'Action'
我希望得到预期的结果,如何防止外籍人士搞砸?
答案 0 :(得分:2)
expat不会搞砸,<
只是字符<
的XML编码。恰恰相反,如果expat将返回文字<
,那么这将是关于XML规范的错误。话虽这么说,您当然可以使用xml.sax.saxutils.escape
:
>>> from xml.sax.saxutils import escape
>>> escape("<fail/>")
'<fail/>'
expat解析器也可以自由地报告它看起来适合的任何块的所有字符串数据,因此你必须自己连接它们。
答案 1 :(得分:0)
SAX和StAX解析器都可以以任何方便的方式自由分解字符串(尽管StAX有一个COALESCE模式,可以强制它为你组装片段)。
原因是在某些情况下通常可以编写软件流,而不必关心重新组装字符串片段的开销。
通常我会在变量中累积文本,并在看到下一个StartElement或EndElement事件时使用内容。此时,我还将累积文本变量重置为空。