生成XML的最佳方法是什么?

79 投票
6 回答
137624 浏览
提问于 2025-04-16 04:53

我正在创建一个网络接口,需要一种快速生成格式良好的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>

想了解更多信息,可以查看 教程

撰写回答