2011-03-11 16 views
1

xmlデータの解析にlxmlを使用しています。私はさまざまなノードでxmlを分割し、これらのサブツリーのそれぞれにデータを書き込んでファイルを分割する必要があります。 lxmlは_ElementTreeクラスのwrite()メソッドを提供しています。このメソッドは、解析ツリーが表すxmlをファイルに簡単に書き出します。lxml:ツリー内の指定された要素から新しい要素ツリーを作成する方法

したがって、与えられたノードのサブツリーのルートノードによってツリー(_ElementTreeオブジェクト)を作ることができれば、簡単にwrite()メソッドを使うことができます。どうやってするか。

答えて

4

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:ありがとうございます - 'parser'はXML解析には必要ありません。実際には削除しました。 –

5

申し訳ありませんが、私は答えを見つけました。その:あなたはたとえば、あなただけのetree.tostring(element)の結果を書き込むことができ、ファイルの要素とその内容を書き込むために新しいのElementTreeを作成する必要はありません

new_tree = etree.ElementTree(node_in_tree) 
関連する問題