我试图删除给定元素的所有兄弟姐妹:
例如,给定这个 etree 对象
<xml>
<letter name="A">
<letter name="B">
<letter name="C">
</letter>
<letter name="D">
</letter>
<letter name="G">
</letter>
<letter name="H">
</letter>
<letter name="I">
</letter>
</letter>
<letter name="E">
<letter name="F">
</letter>
</letter>
</letter>
</xml>
我想删除所有 G 节点兄弟并返回:
<xml>
<letter name="A">
<letter name="B">
<letter name="G">
</letter>
</letter>
<letter name="E">
<letter name="F">
</letter>
</letter>
</letter>
</xml>
不使用 xpath 或 find,以迭代方式。
你能提供一些关于如何做到这一点的提示吗?
这是我刚刚写的代码
import xml.etree.ElementTree as etree
data = """
<xml>
<letter name="A">
<letter name="B">
<letter name="C">
</letter>
<letter name="D">
</letter>
<letter name="G">
</letter>
<letter name="H">
</letter>
<letter name="I">
</letter>
</letter>
<letter name="E">
<letter name="F">
</letter>
</letter>
</letter>
</xml>
"""
tree =etree.fromstring(data)
for parent in tree.getiterator():
for child in parent:
for subchild in child:
if subchild.attrib.get('name') == "G":
parent_name = child.attrib.get('name')
#print parent_name
for parent in tree.getiterator():
if parent.attrib.get('name') == parent_name:
for child in parent:
if child.attrib.get('name') == "G":
print "not this"
else:
parent.remove(child)
print etree.tostring(tree)
干杯!