我正在使用ElementTree。我有一个解析的xml文档,如下所示:
<data>
<name>
<slash>/</slash>
</name>
</data>
我希望能够使用html转义字符的十六进制代码保存它。
由于'{'的hex code是2F,我想将xml保留为:
<data>
<name>
<slash>/</slash>
</name>
</data>
这样做的pythonic方法是什么?理想情况下,我希望这可以工作:
import xml.etree.ElementTree as ET
xml_doc = ET.tostring(source,method="xml")
xml_doc=change_to_html_hex_code(xml_doc)
out_file = open("output.xml",'w')
out_file.write(xml_doc)
答案 0 :(得分:1)
您可以使用编解码器模块(包含在python中)
import codecs
def returnHex(input):
hexitup = codecs.getencoder('hex')
return ("&#" + hexitup(input)[0]+";")
print(returnHex('/'))
这应该返回&amp;#2f;
答案 1 :(得分:1)
使用lxml:
x = """<data>
<name>
<slash>/</slash>
</name>
</data>"""
import lxml.etree as et
xml_doc = et.fromstring(x)
for node in xml_doc.xpath("//*[contains(text(), '/')]"):
node.text = node.text.replace("/","/")
print(et.tostring(xml_doc))
哪会给你:
<data>
<name>
<slash>&#x2f;</slash>
</name>
</data>
或xml:
from xml.etree import ElementTree as et
xml_doc = et.fromstring(x)
for node in xml_doc.iter("*"):
if "/" in node.text:
node.text = node.text.replace("/","/")
要写入该文件,this answer涵盖两者。