【问题标题】:Remove specific numbers of XML elements having same tags and attribute values using Element tree in python使用python中的元素树删除特定数量的具有相同标签和属性值的XML元素
【发布时间】:2020-06-23 09:48:45
【问题描述】:

我有以下 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
    如果计数

但是,它会抛出以下错误:

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

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

提前致谢。

桑巴旺

【问题讨论】:

  • 请上传一个有效的 XML sn-p 并解释预期的输出。

标签: python python-3.x xml elementtree minidom


【解决方案1】:

类似这样的:

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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-24
    • 1970-01-01
    • 2018-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-13
    • 1970-01-01
    相关资源
    最近更新 更多