生成XML的最佳方法是什么?
我正在创建一个网络接口,需要一种快速生成格式良好的XML的方法。但我在Python中找不到合适的办法。
注意:有些库看起来不错,但要么没有文档说明,要么只能输出到文件中。
6 个回答
24
我会使用yattag这个库。
from yattag import Doc
doc, tag, text = Doc().tagtext()
with tag('food'):
with tag('name'):
text('French Breakfast')
with tag('price', currency='USD'):
text('6.95')
with tag('ingredients'):
for ingredient in ('baguettes', 'jam', 'butter', 'croissants'):
with tag('ingredient'):
text(ingredient)
print(doc.getvalue())
顺便说一下,我是这个库的作者。
98
ElementTree 是一个很不错的模块,可以用来读取和写入 XML 文件,比如:
from xml.etree.ElementTree import Element, SubElement, tostring
root = Element('root')
child = SubElement(root, "child")
child.text = "I am a child"
print(tostring(root))
输出结果:
<root><child>I am a child</child></root>
想了解更多细节和如何美化输出,可以查看这个 教程。
另外,如果你的 XML 结构比较简单,不要小看字符串格式化的威力哦 :)
xmlTemplate = """<root>
<person>
<name>%(name)s</name>
<address>%(address)s</address>
</person>
</root>"""
data = {'name':'anurag', 'address':'Pune, india'}
print xmlTemplate%data
输出结果:
<root>
<person>
<name>anurag</name>
<address>Pune, india</address>
</person>
</root>
对于复杂的格式化,你也可以使用 string.Template 或者一些模板引擎。
96
使用 lxml 库:
from lxml import etree
# create XML
root = etree.Element('root')
root.append(etree.Element('child'))
# another child with text
child = etree.Element('child')
child.text = 'some text'
root.append(child)
# pretty string
s = etree.tostring(root, pretty_print=True)
print s
输出结果:
<root>
<child/>
<child>some text</child>
</root>
想了解更多信息,可以查看 教程。