Мне потребовалось время, чтобы понять, что все теги <e>
являются подузлами <d>
.
Если мы можем предположить, что вышесказанное верно для всех ваших целевых узлов (<e>
узлы со значением mmm
), вы можете использовать этот скрипт. (Я добавил несколько дополнительных узлов, чтобы проверить, работает ли он
import xml.etree.ElementTree as ET
xml_string = """<?xml version='1.0' encoding='UTF-8'?>
<parent>
<first>
<a>123</a>
<c>987</c>
<d>
<e>mmm</e>
<e>aaa</e>
<e>mmm</e>
<e>yyy</e>
</d>
</first>
<second>
<a>456</a>
<c>345</c>
<d>
<e>mmm</e>
<e>hhh</e>
</d>
</second>
</parent>"""
# this is how I create my root, if you choose to do it in a different way the end of this script might not be useful
root = ET.fromstring(xml_string)
target_node_first_parent = 'd'
target_node = 'e'
target_text = 'mmm'
# find all <d> nodes
for node in root.iter(target_node_first_parent):
# find <e> subnodes of <d>
for subnode in node.iter(target_node):
if subnode.text == target_text:
node.remove(subnode)
# output the result
tree = ET.ElementTree(root)
tree.write('output.xml')
Я попытался просто удалить узлы, найденные root.iter(yourtag)
, но, видимо, это невозможно из root (очевидно, это было не то easy )
Дайте мне знать, помогло ли вам это! Я не слишком знаком с XML, если бы я вырезал какую-то терминологию, я был бы рад услышать и выучить!