我有一个第三方应用程序正在解析 XML 文件中的魔术字符串,即使它应该将它们视为字符文字。 例如,假设我的 XML 包含以下段:
<element>Sentence containing magicString</element>
为了防止第三方应用程序将
magicString
解析为命令,我想将此xml片段转换为:
<element>Sentence containing D;agicString</element>
如何在 Python 中实现此目的,而不进行全局查找替换(例如,可能存在名为
magicString
的元素无法重命名或 XML 无效)? 以下说明了我的尝试:
from xml.etree import ElementTree
xml = ElementTree.parse(xmlPath)
element = xml.find('.//grandparent/parent/element'):
element.text = 'D;agicString'
xml.write(xmlPath)
问题在于,分配给
Element.text
属性会转义文本,因此会生成包含以下内容的 XML 文件:
<element>&#6D;agicString</element>
你可以转义、取消转义 html 实体:
import xml.etree.ElementTree as ET
import html
t = html.escape('Sentence containing D;agicString')
element= ET.Element('element')
element.text = t
ET.dump(html.unescape(element))