Pythonの初心者、さらにはxmlの初心者なので、我慢してください:)
以下のような構造の既存のxmlファイルがあります。<Zone>
一致するノード、または指定したノードのクローンを作成したいと<name>.text == "Bill"
思います。
ループして使用してelem.append(copy.deepcopy(---))
みましたが、ノードを追加してループに追加することになりました。言うまでもなく、しばらくの間実行されました。
これをその場で簡単に行うことはできますか、それともすべてを別のファイルに書き込む必要がありますか?私はコードを追加しますが、それが壊れて物事を複雑にするのではないかと心配しています!
問題を明確にしたことを願っています。
<DBname>
<Level_1>
<Zone>
<name>Fred</name>
<att1>xxx</att1>
<att2>yyy</att2>
</Zone>
<Zone>
<name>Bill</name>
<att1>111</att1>
<att2>222</att2>
</Zone>
<Zone>
<name>Bob</name>
<att1>333</att1>
<att2>444</att2>
</Zone>
</Level_1>
</DBname>
OK私は解決策を考え出したかもしれませんが、コメント/改善は大歓迎です。
これは動作しません。追加された項目は「for」ループを詰め込みます。
from lxml import etree as ET
import copy
tree = ET.parse(xml_file)
root = tree.getroot()
for elem in root:
for source in elem:
if source.find('name').text == "Bill":
elem.append(copy.deepcopy(source))
これは機能しているように見えます:
from lxml import etree as ET
import copy
tree = ET.parse(xml_file)
root = tree.getroot()
for elem in root:
for zone in elem.findall('Zone'):
if zone.find('name').text == "Bill":
elem.append(copy.deepcopy(zone))