一尘不染

使用python创建一个简单的XML文件

python

如果我想在python中创建一个简单的XML文件,该怎么办?(明智的)

我想要的xml看起来像:

<root>
 <doc>
     <field1 name="blah">some value1</field1>
     <field2 name="asdfasd">some vlaue2</field2>
 </doc>

</root>

阅读 1339

收藏
2020-02-19

共1个答案

一尘不染

如今,最流行(且非常简单)的选项是ElementTree API,该元素自Python 2.5起已包含在标准库中。

可用的选项有:

  • ElementTree(ElementTree的基本,纯Python实现。自2.5以来是标准库的一部分)
  • cElementTree(ElementTree的优化C实现。从2.5开始在标准库中提供)
  • LXML(基于libxml2。提供ElementTree API的丰富超集以及XPath,CSS选择器等)

这是一个如何使用stdlib cElementTree生成示例文档的示例:

import xml.etree.cElementTree as ET

root = ET.Element("root")
doc = ET.SubElement(root, "doc")

ET.SubElement(doc, "field1", name="blah").text = "some value1"
ET.SubElement(doc, "field2", name="asdfasd").text = "some vlaue2"

tree = ET.ElementTree(root)
tree.write("filename.xml")

我已经对其进行了测试,并且可以正常工作,但是我假设空格并不重要。如果您需要“ prettyprint”缩进,请告诉我,我将查找如何做。(这可能是特定于LXML的选项。我很少使用stdlib实现)

为了进一步阅读,这里有一些有用的链接:

  • 适用于Python标准库的API文档
  • 入门教程(来自原始作者的网站)
  • LXML etree教程。(带有示例代码,用于从所有主要ElementTree实现中加载最佳可用选项)
  • 最后一点,cElementTree或LXML都应该足够快以满足您的所有需求(都是经过优化的C代码),但是在这种情况下,您需要充分利用性能的最后一点, LXML网站指示:
  • LXML显然在序列化(生成)XML方面胜出
  • 作为实现正确的父遍历的副作用,LXML的解析比cElementTree慢一些。
2020-02-19