2011-03-11 128 views
1

我使用lxml來解析xml數據。我必須在各個節點上分割xml,並在每個這些子樹中寫入數據以分離文件。 lxml在_ElementTree類中提供了write()方法,該方法可方便地將由分析樹表示的xml寫入文件。lxml:如何從樹中給定元素創建新元素樹

因此,如果我可以通過給定節點的子樹的根節點創建樹(_ElementTree對象),那麼我可以很容易地使用write()方法。怎麼做。

回答

4

你不需要爲了寫一個元素,它的內容到一個文件中創建一個新的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 
+0

你解決方案很優雅。謝謝:) – Xolve

+0

不應該是etree.parse(fb,解析器)?否則分析器變量已過時 – kravietz

+0

@kravietz:謝謝 - 對於XML解析,「解析器」不是必需的,事實上,所以我刪除了它,並檢查了示例仍然有效 –

5

對不起,我找到了答案。它:

new_tree = etree.ElementTree(node_in_tree)