如何在python etree中获取正确的转义XML?

我正在使用
python版本2.7.3.

的test.txt:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <test>The tag &lt;StackOverflow&gt; is good to bring up at parties.</test>
</root>

结果:

>>> import xml.etree.ElementTree as ET
>>> e = ET.parse('test.txt')
>>> root = e.getroot()
>>> print root.find('test').text
The tag <StackOverflow> is good to bring up at parties.

如您所见,解析器必须已将& lt;’s更改为<‘s等. 我想看到的: 标签& lt; StackOverflow& gt;很高兴参加派对. 未经修饰的原始文本.有时我真的很喜欢它.生. 我想将此文本原样用于在HTML中显示,因此我不希望XML解析器弄乱它. 我是否必须重新逃离每根弦或者还有其他方式?

最佳答案

import xml.etree.ElementTree as ET
e = ET.parse('test.txt')
root = e.getroot()
print(ET.tostring(root.find('test')))

产量

<test>The tag &lt;StackOverflow&gt; is good to bring up at parties.</test>

或者,您可以使用saxutils.escape转义文本:

import xml.sax.saxutils as saxutils
print(saxutils.escape(root.find('test').text))

产量

The tag &lt;StackOverflow&gt; is good to bring up at parties.
点赞