【发布时间】:2011-03-11 17:57:28
【问题描述】:
我正在使用lxml 来解析 xml 数据。我必须在各个节点上划分 xml,并将每个子树中的数据写入单独的文件。 lxml 在 _ElementTree 类中提供了 write() 方法,可以方便地将解析树表示的 xml 写入文件。
因此,如果我可以通过给定节点的子树的根节点创建树(_ElementTree 对象),那么我可以轻松使用 write() 方法。如何做到这一点。
【问题讨论】:
我正在使用lxml 来解析 xml 数据。我必须在各个节点上划分 xml,并将每个子树中的数据写入单独的文件。 lxml 在 _ElementTree 类中提供了 write() 方法,可以方便地将解析树表示的 xml 写入文件。
因此,如果我可以通过给定节点的子树的根节点创建树(_ElementTree 对象),那么我可以轻松使用 write() 方法。如何做到这一点。
【问题讨论】:
抱歉打扰了,我找到了答案。它的:
new_tree = etree.ElementTree(node_in_tree)
【讨论】:
您无需创建新的 ElementTree 即可将元素及其内容写入文件,只需将 etree.tostring(element) 的结果写入即可,例如:
from lxml import etree
with open("whatever.xml") as fp:
tree = etree.parse(fp)
i = 0
for node in tree.xpath('//section'):
output_filename = "output-%d.xml" % (i,)
with open(output_filename,"w") as fp:
fp.write(etree.tostring(node))
i += 1
【讨论】:
parser 不是 XML 解析所必需的,所以我已经删除了它,并检查了该示例是否仍然有效