python - 通过只保留深度为 2 的每个节点的 1 个子节点来简化 XML
问题描述
我有一个复杂的 XML,很难看到其结构,因为第 2 级的每个节点都有数千个子节点。我想像这样截断 XML:
<main>
<a type="x">
<b>
<b> # should be deleted
<b> # should be deleted
# thousand others
</a>
<a type="y">
<c>
<c> # should be deleted
# many others
</a>
<a type="z">
<d>
<d> # should be deleted
# many others
</a>
</main>
如何为2、3等的每个节点只保留一个孩子并导出结果?
我试过这个,但似乎没有被删除:
import xml.etree.ElementTree as ET
tree = ET.parse('in.xml')
root = tree.getroot()
for l1 in root:
print(l1, l1.tag, l1.attrib)
for i, l2 in enumerate(l1):
print(i, l2)
if i > 0:
l1.remove(l2) # nothing seems removed, why?
tree.write('out.xml')
解决方案
问题可能来自我在迭代时修改了一个列表。使用list(l1)
解决它:
for l1 in root:
for l2 in list(l1)[1:]:
l1.remove(l2)
推荐阅读
- javascript - 如何在Javascript中压缩和重新映射数组的数据
- python - 找不到名为“pyopengv”的模块
- html - 用于移动视图的触摸可滚动标签
- javascript - “从右到左的运算符关联性”是否与 javaScript 中赋值运算符中的求值顺序相同
- python - 有效地将 OHE 转换为稀疏
- java - Springboot中如何为Redis缓存中的每个条目附加一个TTL
- c++ - Visual Studio中函数调用和第一行函数之间的代码损坏问题
- redirect - Traefik 从一台主机重定向到另一台主机
- javascript - 将 json 数据与 javascript 合并
- angular - BackgroundGeolocation 与 Angular 9 和 Cordova