2014-12-12 1 views
0

Прямо к точке.Python XML-вывод с кавычками

После питон скрипт возвращает в качестве

<?xml version='1.0' encoding='iso-8859-1'?> 
<Class><Domains>Domain name is &amp;quot;A&amp;quot;</Domains></Class> 

Но мне нужен выходной XML точно, как показано ниже.

<?xml version='1.0' encoding='iso-8859-1'?> 
<Class><Domains>Domain name is &quot;A&quot;</Domains></Class> 

Код

from xml.etree import ElementTree as etree 
def main(): 
    etree.register_namespace("esri","http://www.esri.com/schemas/ArcGIS/10.0") 
    root = etree.XML('<Class></Class>') 
    root.append(etree.Element("Domains")) 
    s = "Domain name is &quot;A&quot;" 
    root[0].text = s 
    print etree.tostring(root, encoding='iso-8859-1') 

if __name__ == '__main__': 
    main() 

Спасибо,

Srav

ответ

1

Вы передали ET строку с &, которую необходимо избежать, и это то, что он сделал. Возьмите вместо него неэкранированную строку.

s = 'Domain name is "A"' 

Если вы хотите закодировать цитату, вы можете использовать модуль

>>> cgi.escape('Domain name is "A"', quote=True) 
'Domain name is &quot;A&quot;' 

cgi Если строка уже &quot; в нем, вы можете экранирования в его, прежде чем передать его ET

>>> HTMLParser.HTMLParser().unescape('Domain name is &quot;A&quot;') 
u'Domain name is "A"' 
+0

Эти выходы ' Доменное имя« A »', не совсем то, что он хотел. – elyase

+0

@elyase - вы правы! Я добавил несколько вариантов. – tdelaney

+0

К сожалению, я тоже не думаю, что это работает. После того, как вы освободите его, он все равно «ошибочно» экранируется 'to_string'. – elyase