2024-04-18 18:20:31 发布
网友
如果我想用python创建一个简单的XML文件,我有什么选择?(图书馆方面)
我想要的xml看起来像:
<root> <doc> <field1 name="blah">some value1</field1> <field2 name="asdfasd">some vlaue2</field2> </doc> </root>
Yattaghttp://www.yattag.org/或https://github.com/leforestier/yattag提供了一个有趣的API来创建这样的XML文档(以及HTML文档)。
它使用了context manager和with关键字。
with
from yattag import Doc, indent doc, tag, text = Doc().tagtext() with tag('root'): with tag('doc'): with tag('field1', name='blah'): text('some value1') with tag('field2', name='asdfasd'): text('some value2') result = indent( doc.getvalue(), indentation = ' '*4, newline = '\r\n' ) print(result)
所以你会得到:
<root> <doc> <field1 name="blah">some value1</field1> <field2 name="asdfasd">some value2</field2> </doc> </root>
lxml library包含一种非常方便的XML生成语法,称为E-factory。以下是我如何举例说明:
#!/usr/bin/python import lxml.etree import lxml.builder E = lxml.builder.ElementMaker() ROOT = E.root DOC = E.doc FIELD1 = E.field1 FIELD2 = E.field2 the_doc = ROOT( DOC( FIELD1('some value1', name='blah'), FIELD2('some value2', name='asdfasd'), ) ) print lxml.etree.tostring(the_doc, pretty_print=True)
输出:
它还支持添加到已经生成的节点,例如,在上面的节点之后,您可以说
the_doc.append(FIELD2('another value again', name='hithere'))
现在,最流行的(也是最简单的)选项是ElementTree API, 从Python2.5开始就包含在标准库中。
可用的选项有:
下面是如何使用in stdlib celementree生成示例文档的示例:
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实现)
为了进一步阅读,这里有一些有用的链接:
最后,cElementTree或LXML应该足够快,可以满足您的所有需求(都是经过优化的C代码),但是如果您在需要挤出最后一点性能的情况下,LXML站点上的基准表明:
Yattaghttp://www.yattag.org/或https://github.com/leforestier/yattag提供了一个有趣的API来创建这样的XML文档(以及HTML文档)。
它使用了context manager和
with
关键字。所以你会得到:
lxml library包含一种非常方便的XML生成语法,称为E-factory。以下是我如何举例说明:
输出:
它还支持添加到已经生成的节点,例如,在上面的节点之后,您可以说
现在,最流行的(也是最简单的)选项是ElementTree API, 从Python2.5开始就包含在标准库中。
可用的选项有:
下面是如何使用in stdlib celementree生成示例文档的示例:
我已经测试过了,而且有效,但我假设空白并不重要。如果你需要“prettyprint”缩进,让我知道,我会查怎么做。(它可能是LXML特定的选项。我很少使用stdlib实现)
为了进一步阅读,这里有一些有用的链接:
最后,cElementTree或LXML应该足够快,可以满足您的所有需求(都是经过优化的C代码),但是如果您在需要挤出最后一点性能的情况下,LXML站点上的基准表明:
相关问题 更多 >
编程相关推荐