用python迭代编写XML节点

2024-09-26 22:50:25 发布

您现在位置:Python中文网/ 问答频道 /正文

有很多方法可以读取XML,包括一次读取(DOM)和一次读取一位(SAX)。我曾使用SAX或lxml迭代读取大型XML文件(例如wikipediadump,它是6.5GB压缩的)。在

但是,在对该XML文件进行一些迭代处理(在python中使用ElementTree)之后,我希望将(新的)XML数据写入另一个文件。在

有没有库可以迭代地写出XML数据?我可以创建XML树,然后将其写出,但是如果没有大量的ram,这是不可能的。有没有办法迭代地将XML树写入文件?一次一点?在

我知道我可以自己用print "<%s>" % tag_name等来生成XML,但这似乎有点。。。哈奇。在


Tags: 文件数据方法nametagxmllxmldom
3条回答

Fredrik Lundh的elementtree.SimpleXMLWriter将允许您增量地编写XML。以下是嵌入模块中的演示代码:

from elementtree.SimpleXMLWriter import XMLWriter
import sys

w = XMLWriter(sys.stdout)

html = w.start("html")

w.start("head")
w.element("title", "my document")
w.element("meta", name="generator", value="my application 1.0")
w.end()

w.start("body")
w.element("h1", "this is a heading")
w.element("p", "this is a paragraph")

w.start("p")
w.data("this is ")
w.element("b", "bold")
w.data(" and ")
w.element("i", "italic")
w.data(".")
w.end("p")

w.close(html)

如果您没有找到其他任何东西,我更希望从ElementTree继承并创建一个“iteractiveElementTree”,并在其中添加一个“file”属性。我将这些节点的子类化为一个“start_tag_comitted”属性和一个“commit”方法。一旦被调用,这个“commit”方法将调用子树的render方法-从最远的父级开始,其中e“start_tag_comitted”为false。有了这个字符串,我就可以手动去除当前节点父节点的结束标记。有必要处理以前被反对但没有关闭的父母兄弟姐妹。在

然后,我将从内存模型中删除“committed”节点。 您还需要为每个节点指定一个节点父节点,因为ElementTree不这样做。在

(如果没有更好的答案,请写信给我,如果你被困在那里,我可以实现这一点)

如果您正在阅读XML方言1,并且必须编写XML方言2,那么使用xslt编写转换过程不是一个好主意吗?你甚至不需要这样的源代码。在

相关问题 更多 >

    热门问题