更改 python 中 xml 树的属性

Change the atribute of the xml tree in python

我在更改 xml 文件的属性时遇到问题。 我的树看起来像那样

<Objects>
<BigObj Version="2.2" Name="Something">
<ItemList>
<Item Name="s_1" Selected="false"/>
<Item Name="s_2" Selected="false"/>
<Item Name="s_3" Selected="true"/>
<Item Name="s_4" Selected="false"/>
</ItemList>
</BigObj >
</Objects>

我需要检查“s_x”是否在名称列表中,如果在,则将 Selected 的值更改为 true,如果不是 false(或保持为 false) 我试着用这段代码来做到这一点:

lslist = ["s_1","s_4"]        
for child in root.findall("./Objects/BigObj/ItemList/Item"):
        for idx in lslist:
            if idx in child.find("Name").text:
                child.set('Selected', "true")
            else:
                child.set('Selected', "false")

但是我有一个 AttributeError: 'NoneType' object has no attribute 'text'

以下作品

import xml.etree.ElementTree as ET

lslist = ["s_1", "s_4"]

xml = '''<Objects>
<BigObj Version="2.2" Name="Something">
<ItemList>
<Item Name="s_1" Selected="false"/>
<Item Name="s_2" Selected="false"/>
<Item Name="s_3" Selected="true"/>
<Item Name="s_4" Selected="false"/>
</ItemList>
</BigObj ></Objects>'''

root = ET.fromstring(xml)
items = root.findall('.//Item')
for item in items:
    item.attrib['Selected'] = str(item.attrib['Name'] in lslist)
ET.dump(root)

输出

<Objects>
<BigObj Version="2.2" Name="Something">
<ItemList>
<Item Name="s_1" Selected="True" />
<Item Name="s_2" Selected="False" />
<Item Name="s_3" Selected="False" />
<Item Name="s_4" Selected="True" />
</ItemList>
</BigObj></Objects>