在python和lxml中生成xml

use*_*618 9 python xml lxml

我有来自sql的这个xml,我想通过python 2.7和lxml做同样的事情

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

我现在有:

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()
Run Code Online (Sandbox Code Playgroud)

你知道如何添加其他属性吗?

Mar*_*ani 14

请注意,这也会打印BOM

>>> 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>
Run Code Online (Sandbox Code Playgroud)


use*_*312 13

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') 
Run Code Online (Sandbox Code Playgroud)

  • @sukbir可能没有使用Windows.会发生什么是lxml在XML标头和正文之间写入换行符(UTF-16LE中的0A 00).然后由Win文本模式骚扰成为0D 0A 00,这使得之后的所有内容看起来像UTF-16BE,因此当您显示它时,中文等字符.在这种情况下,您可以通过在打开文件时使用"wb"而不是"w"来解决此问题.但是我强烈建议你使用'UTF-8'(拼写完全相同)作为你的编码.你为什么使用UTF-16?你喜欢大文件和/或奇怪的问题吗? (3认同)

小智 5

保存到 XML 文件

doc.write('output.xml', xml_declaration=True, encoding='utf-16') 
Run Code Online (Sandbox Code Playgroud)

代替:

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

doc.write(outFile, xml_declaration=True, encoding='utf-16') 
Run Code Online (Sandbox Code Playgroud)