使用 python 中的元素树删除具有相同标记和属性值的特定数量的 XML 元素



我有以下XML元素,我想使用Python中的元素树从每个Flagelemnts和Fav元素中删除仅2个Item标签。

<Flagelements>
<Item Flags="0" />
<Item Flags="0" />
<Item Flags="0" />
<Item Flags="0" />
</Flagelements>
<Fav>
<Item ShareWhenSavedAsFav="255" />
<Item ShareWhenSavedAsFav="255" />
<Item ShareWhenSavedAsFav="255" />
<Item ShareWhenSavedAsFav="255" />
</Fav>

这是一个巨大的XML文件,我已经尝试了下面的代码来做同样的事情。

for child in root:
count=0
for ch in child:
for i in ch:
i.attrib['GUID']=='4df88cf7d0da00000b30927e000007':
if i.tag == 'Item':
print(i.tag, i.attrib)
count=count+1
if count< 1:
ch.remove(i)

但它正在删除所有带有 Item 标签的标签。

另外,我已经尝试了以下代码 .findall 方法

对于 root.findall(".//Fav/Item"(: 计数=计数+1 如果计数<3: 打印(项目标签( item.getparent((.remove(item(

但是,它抛出以下错误:

'xml.etree.ElementTree.Element' 对象没有属性 'getparent'

让我知道我该如何做同样的事情。

提前谢谢。

桑巴瓦姆

像这样:

import xml.etree.ElementTree as ET
xml = '''<r><Flagelements>
<Item Flags="0" dummy="1" />
<Item Flags="0" dummy="2" />
<Item Flags="0" dummy="3" />
<Item Flags="0" dummy="4" />
</Flagelements>
<Fav>
<Item ShareWhenSavedAsFav="255" />
<Item ShareWhenSavedAsFav="255" />
<Item ShareWhenSavedAsFav="255" />
<Item ShareWhenSavedAsFav="255" />
</Fav></r>'''
root = ET.fromstring(xml)
flag_elements = root.findall('.//Flagelements')
for fe in flag_elements:
items = fe.findall('./Item')
for idx,item in enumerate(items):
if idx < 2:
fe.remove(item)
ET.dump(root)

输出

<r><Flagelements>
<Item Flags="0" dummy="3" />
<Item Flags="0" dummy="4" />
</Flagelements>
<Fav>
<Item ShareWhenSavedAsFav="255" />
<Item ShareWhenSavedAsFav="255" />
<Item ShareWhenSavedAsFav="255" />
<Item ShareWhenSavedAsFav="255" />
</Fav></r>

相关内容

  • 没有找到相关文章

最新更新