用python和lxm生成xml

2024-04-19 09:34:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个来自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>

现在我有:

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()

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


Tags: sqlversionrootxmlelementfilename事情country
3条回答

将我的评论提升为答案:

@sukbir可能没有使用Windows。结果是lxml在XML头和正文之间写了一个新行(0A 00,UTF-16LE格式)。然后,Win文本模式将其调至0D 0A 00,这使得之后的所有内容看起来都像UTF-16BE,因此在显示时都是中文etc字符。在这个例子中,您可以在打开文件时使用“wb”而不是“w”来解决这个问题。不过,我强烈建议您使用“UTF-8”(拼写与此完全相同)作为编码。你为什么要用UTF-16?你喜欢大文件和/或奇怪的问题吗?

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') 

注意,这也会打印物料清单

>>> 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>

相关问题 更多 >