Генерация XML в Python и LXML - PullRequest
       0

Генерация XML в Python и LXML

9 голосов
/ 17 декабря 2010

У меня есть этот XML из SQL, и я хочу сделать то же самое с Python 2.7 и lxml

<?xml version="1.0" encoding="utf-16"?>
<results>
  <Country name="Germany" Code="DE" Storage="Basic" Status="Fresh" Type="Photo" />
</results>

Теперь у меня есть:

from lxml import etree

# create XML 
results= etree.Element('results')

country= etree.Element('country')
country.text = 'Germany'
root.append(country)



filename = "xmltestthing.xml"
FILE = open(filename,"w")
FILE.writelines(etree.tostring(root, pretty_print=True))
FILE.close()

Знаете ли вы, как добавить остальные атрибуты?

Ответы [ 4 ]

13 голосов
/ 17 декабря 2010

Обратите внимание, это также печатает спецификацию

>>> from lxml.etree import tostring
>>> from lxml.builder import E
>>> print tostring(
             E.results(
                 E.Country(name='Germany',
                           Code='DE',
                           Storage='Basic',
                           Status='Fresh',
                           Type='Photo')
             ), pretty_print=True, xml_declaration=True, encoding='UTF-16')

��<?xml version='1.0' encoding='UTF-16'?>
<results>
  <Country Status="Fresh" Type="Photo" Code="DE" Storage="Basic" name="Germany"/>
</results>
11 голосов
/ 17 декабря 2010
from lxml import etree

# Create the root element
page = etree.Element('results')

# Make a new document tree
doc = etree.ElementTree(page)

# Add the subelements
pageElement = etree.SubElement(page, 'Country', 
                                      name='Germany',
                                      Code='DE',
                                      Storage='Basic')
# For multiple multiple attributes, use as shown above

# Save to XML file
outFile = open('output.xml', 'w')
doc.write(outFile, xml_declaration=True, encoding='utf-16') 
3 голосов
/ 18 декабря 2010

Повышение моего комментария к ответу:

@ sukbir, вероятно, не использует Windows. Что происходит, так это то, что lxml записывает новую строку (0A 00 в UTF-16LE) между заголовком XML и телом. Затем в текстовом режиме Win это превращается в 0D 0A 00, что делает все, что после этого выглядит как UTF-16BE, следовательно, китайские и т. Д. Символы при его отображении. В этом случае вы можете обойти это, используя «wb» вместо «w» при открытии файла. Однако я настоятельно рекомендую использовать в качестве кодировки «UTF-8» (пишется именно так). Почему вы используете UTF-16? Вам нравятся большие файлы и / или странные проблемы?

2 голосов
/ 11 сентября 2013

Сохранить в файл XML

doc.write('output.xml', xml_declaration=True, encoding='utf-16') 

вместо:

outFile = open('output.xml', 'w')

doc.write(outFile, xml_declaration=True, encoding='utf-16') 
...