2017-03-01 8 views
1

私はアプリケーションでXML解析のためのソリューションとしてlxmlを使用しています。lxml - 子どもの子供を置き換えることができません

私はlxmlのは、親の直接の子を置き換えることができることを理解しますが、その子の下ではレベルが.replace

例XMLを使用していない:

<root> 

    <dc> 

     <batman alias='dark_knight' /> 

    </dc> 

</root> 

私はそうのような文字列に変更されたタグを持っています

<batman alias='not_dark_knight' /> 

xpath '/ root/dc/batman'を使用して元のXMLを置き換えるには、何か助けが必要です。

from lxml import etree 

original_xml = "<root><dc><batman alias='dark_knight' /></dc></root>" 
modified_tag = "<batman alias='not_dark_knight' />" 
x_path = '/root/dc/batman' 
original_obj = etree.fromstring(original_xml) 
modified_obj = etree.fromstring(modified_tag) 

original_obj.replace(original_obj.xpath(x_path)[0], modified_obj) 

これはとValueErrorをスローします。要素は、このノードの子ではありません。 文字列をうまく置き換える方法はありますか? (lxmlのみを使用)

私はlxmlライブラリを使用して解決したいと思います。

答えて

1

お分かりのように、置き換えたい要素の親replace()に電話する必要があります。あなたは、動的に親に取得する.getparent()を使用することがあります。

batman = original_obj.xpath(x_path)[0] 
batman.getparent().replace(batman, modified_obj) 
+0

これは私のために働きました。ありがとう@alecxe。私はそれを逃したかもしれない。 :) –

関連する問題