【发布时间】:2014-05-13 18:27:25
【问题描述】:
我试图删除给定元素的所有兄弟:
例如,给定这个 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)
干杯!
【问题讨论】:
-
你能分享你已经尝试过的任何代码吗?
-
不使用xpath?为什么?
-
任何帮助@JustinBarber??
-
@Charlie 抱歉耽搁了。感谢您更新您的问题。请参阅下面的答案。
标签: python xml elementtree xml.etree