【问题标题】:How do I get properly escaped XML in python etree untouched?如何在 python etree 中正确转义 XML?
【发布时间】:2014-05-07 11:33:26
【问题描述】:

我正在使用 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.

如您所见,解析器必须将&amp;lt; 更改为&lt; 等。

我想看到的:

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

原封不动的原始文本。有时我真的很喜欢生的。未煮过的。

我想按原样使用此文本在 HTML 中显示,因此我不希望 XML 解析器弄乱它。

我必须重新转义每个字符串还是可以有其他方法?

【问题讨论】:

  • 为了显示在其他来源,只需重新转义!在解析后为您提供正确的 XML 内容是解析器的工作,而 HTML 转义可能会略有不同无论如何
  • 公平点,可能会这样做。只是好奇解析器中是否有一些选项等。

标签: python xml xml.etree


【解决方案1】:
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.

【讨论】:

  • 两种情况都只是重新转义值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-21
  • 2014-03-27
相关资源
最近更新 更多