如何强制SAX解析器不转换XML实体?

时间:2013-02-02 17:01:47

标签: python xml-parsing sax saxparser

我正在使用SAX来解析大型xml文件。 但它会将每个XML code转换为它的符号版本。

如何防止SAX这种行为。

示例with_amp.xml

<?xml version="1.0" encoding="utf-8"?>
<root>
  <title>One Two</title>
  <title>One &amp;mdash;  Two</title>
</root>

python处理程序:

from xml.sax import handler, parse

class Handler(handler.ContentHandler):
    def characters(self, content):
        if content.isspace(): return
        print(content)

if __name__ == "__main__":
    parse(open('with_amp.xml', 'r'), Handler())

我希望输出为:

One Two
One &amp;mdash;  Two

1 个答案:

答案 0 :(得分:0)

使用saxutils,我设法做到了。 https://docs.python.org/2/library/xml.sax.utils.html#module-xml.sax.saxutils

e.g。与您的信息:

print(content)

将成为

print(saxutils.escape(content))

(您需要将saxutils添加到您的导入中: 整个将是

from xml.sax import handler, parse, saxutils

class Handler(handler.ContentHandler):
    def characters(self, content):
        if content.isspace(): return
        print(saxutils.escape(content))

if __name__ == "__main__":
    parse(open('with_amp.xml', 'r'), Handler())