sti*_*o68 2 python xml elementtree python-2.7
给定具有以下结构的XML文件:
<Root>
<Stuff></Stuff>
<MoreStuff></MoreStuff>
<Targets>
<Target>
<ID>12345</ID>
<Type>Ground</Type>
<Size>Large</Size>
</Target>
<Target>
...
</Target>
</Targets>
</Root>
Run Code Online (Sandbox Code Playgroud)
我正在尝试遍历<Targets>元素下的每个子节点,检查每个子节点的<ID>特定值,如果找到该值,那么我想删除整个<Target>条目.我一直在使用ElementTree Python库,但收效甚微.这是我到目前为止所拥有的:
import xml.etree.ElementTree as ET
tree = ET.parse('file.xml')
root = tree.getroot()
iterator = root.getiterator('Target')
for item in iterator:
old = item.find('ID')
text = old.text
if '12345' in text:
item.remove(old)
tree.write('out.xml')
Run Code Online (Sandbox Code Playgroud)
我使用这种方法的问题是只<ID>删除了子元素,但是我需要移除整个<Target>元素及其所有子元素.谁能帮忙!谢谢.
不幸的是,元素树元素不知道他们的父母是谁.有一种解决方法 - 您可以自己构建映射:
tree = ET.parse('file.xml')
root = tree.getroot()
parent_map = dict((c, p) for p in tree.getiterator() for c in p)
# list so that we don't mess up the order of iteration when removing items.
iterator = list(root.getiterator('Target'))
for item in iterator:
old = item.find('ID')
text = old.text
if '12345' in text:
parent_map[item].remove(item)
continue
tree.write('out.xml')
Run Code Online (Sandbox Code Playgroud)
未经测试
| 归档时间: |
|
| 查看次数: |
2228 次 |
| 最近记录: |