正如评论中所述,lxml 是更好的方法。没有 xpath 的替代解决方案:
import xml.etree.ElementTree as ET
xml_s = """<RootNode>
<SubNode name="MainNode" SubNodeID="1">
<SubSubNode SubSubID="10" SubSubName="Product Food">
<Item subItemID="100" ItemName="Apple" OtherName="Gala"/>
<Item subItemID="101" ItemName="Apple" OtherName="Aroma"/>
<Item subItemID="102" ItemName="Pear" OtherName="Williams"/>
<Item subItemID="103" ItemName="Pear" OtherName="Abate"/>
<Item subItemID="104" ItemName="Cranberry" OtherName="Bilberry"/>
<Item subItemID="105" ItemName="Cranberry" OtherName="Bluberries"/>
<Item subItemID="106" ItemName="Strawberry" OtherName="some text"/>
<Item subItemID="107" ItemName="Peach" OtherName="Nectarina"/>
</SubSubNode>
<SubSubNode SubSubID="20" SubSubName="Product Beverage">
<Item subItemID="108" ItemName="Cola" OtherName="Coca cola"/>
<Item subItemID="109" ItemName="Cola" OtherName="Pepsi"/>
<Item subItemID="110" ItemName="Orange Juice" OtherName="Fanta"/>
<Item subItemID="111" ItemName="Soft drink" OtherName="Grape soda"/>
<Item subItemID="112" ItemName="some text" OtherName="Orange soda"/>
<Item subItemID="113" ItemName="Soft drink" OtherName="Grape soda"/>
</SubSubNode>
</SubNode>
</RootNode>"""
root = ET.fromstring(xml_s)
element_list = []
for some_text in root.iter():
if "some text" in some_text.attrib.values():
# print(some_text.tag, some_text.attrib)
element_list.append(some_text)
# Or find the keys with some text
for elem in element_list:
keys = [k for k, v in elem.attrib.items() if v == 'some text']
print(keys)
输出:
['OtherName']
['ItemName']