2016-06-28 2 views
0

Я использую ElementTree. У меня есть разобранный XML-документ, который выглядит следующим образом:Использование Python, пытаясь сохранить файл xml с шестнадцатеричными символами escape-символов html

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

Я хотел бы иметь возможность сохранить его с помощью шестнадцатеричного кода для HTML экранирующего символа.

С hex code для «/» является 2F, я хотел бы сохраняться XML как:

<data> 
    <name> 
     <slash>&#x2f;</slash> 
    </name> 
</data> 

Что такое вещий способ сделать это? В идеале, я хотел бы, чтобы это работало:

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) 

ответ

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 охватывает оба.

1

Вы можете использовать модуль кодеков (входит в питоне)

import codecs 

def returnHex(input): 
    hexitup = codecs.getencoder('hex') 
    return ("&#" + hexitup(input)[0]+";") 

print(returnHex('/')) 

Это должно вернуть & # 2f;

Смежные вопросы