在Python和lxml中生成XML

14 投票
4 回答
39000 浏览
提问于 2025-04-16 08:40

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

你知道怎么添加剩下的属性吗?

4 个回答

5

保存到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') 
15

在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,但其实大部分时候,只要我们仔细查看文档或者社区的讨论,就能找到解决办法。

比如说,当你在写代码时,可能会碰到一些错误信息。这些信息就像是程序在告诉你:“嘿,我遇到麻烦了!”这时候,你可以把这些错误信息放到网上去搜索,看看其他人是怎么解决的。

此外,很多时候,其他开发者会在像StackOverflow这样的论坛上分享他们的经验和解决方案。你可以在这些地方找到很多有用的建议和技巧,帮助你更好地理解问题所在。

总之,遇到问题时,不要慌张,先冷静下来,查找相关资料,看看有没有人遇到过类似的情况,通常都会有办法解决的。

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

注意,这段代码也会打印出字节顺序标记(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>

撰写回答