如何在Python etree中获取未修改的正确转义XML?

8 投票
1 回答
6213 浏览
提问于 2025-04-18 05:40

我正在使用 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; 变成了 < 等等。

我想要看到的内容:

标签 &lt;StackOverflow&gt; 在聚会上提起来很好。

原汁原味的文本。有时候我真的喜欢这种原始的感觉。不加修饰。

我想直接用这些文本在 HTML 中显示,所以我不希望 XML 解析器来干扰它。

我是不是得重新转义每个字符串,还是有其他办法呢?

1 个回答

5
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.

撰写回答