使用Python,尝试使用十六进制编码的html转义字符保存xml文件

时间:2016-06-28 23:22:26

标签: python xml python-2.7 hex ascii

我正在使用ElementTree。我有一个解析的xml文档,如下所示:

<data>
    <name>
        <slash>/</slash>
    </name>
</data>

我希望能够使用html转义字符的十六进制代码保存它。

由于'{'的hex code是2F,我想将xml保留为:

<data>
    <name>
        <slash>&#x2f;</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)

2 个答案:

答案 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("/","&#x2f;")



print(et.tostring(xml_doc))

哪会给你:

<data>
    <name>
        <slash>&amp;#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("/","&#x2f;")

要写入该文件,this answer涵盖两者。