Python 如何使用元素树测试XML节点是否具有特定字符串

Python 如何使用元素树测试XML节点是否具有特定字符串,python,xml,key-value,Python,Xml,Key Value,我目前正在使用元素树解析一些XML,其中一些有多个重复的名称/值对,如下所示。我试图做的是提取感兴趣的元素,即性别=男性和颜色=红色,但由于结构原因,我似乎无法单独使用findall来实现这一点。 如何提取这些元素?我认为正确的逻辑应该是寻找一个子节点,在那里我可以找到child.text='gender'等,然后继续从该子节点打印名称/值。最好的方法是什么 <a:characteristic> <name>gender</name> <

我目前正在使用元素树解析一些XML,其中一些有多个重复的名称/值对,如下所示。我试图做的是提取感兴趣的元素,即性别=男性和颜色=红色,但由于结构原因,我似乎无法单独使用findall来实现这一点。 如何提取这些元素?我认为正确的逻辑应该是寻找一个子节点,在那里我可以找到child.text='gender'等,然后继续从该子节点打印名称/值。最好的方法是什么

<a:characteristic>
    <name>gender</name>
    <value>male</value>
</a:characteristic>
<a:characteristic>
    <name>age</name>
    <value>30</value>
</a:characteristic>
<a:characteristic>
    <name>colour</name>
    <value>red</value>
</a:characteristic>
<a:characteristic>
    <name>language</name>
    <value>python</value>
</a:characteristic>         

性别
男性的
年龄
30
颜色
红色
语言
python

与其尝试处理XML文档结构来进行此类查询,我将创建一个更方便的数据结构来基于此类特征进行查询-一个以特征名称为键、特征值为值的字典

比如:

import xml.etree.ElementTree as ET

data = """<root xmlns:a="http://www.w3.org/2002/07/a#">
    <a:characteristic>
        <name>gender</name>
        <value>male</value>
    </a:characteristic>
    <a:characteristic>
        <name>age</name>
        <value>30</value>
    </a:characteristic>
    <a:characteristic>
        <name>colour</name>
        <value>red</value>
    </a:characteristic>
    <a:characteristic>
        <name>language</name>
        <value>python</value>
    </a:characteristic>        
</root>"""

namespaces = {'a': 'http://www.w3.org/2002/07/a#'} 
root = ET.fromstring(data)
characteristics = {
    item.findtext("name"): item.findtext("value")
    for item in root.findall('a:characteristic', namespaces)
}
print(characteristics)

现在,获取,比如说,
gender
值与
characteristics['gender']

一样简单,除了alecxe将数据转换成一种令人印象深刻的更方便的通用形式之外,还要注意正确使用
findall()
的名称空间声明参数,这很可能挫败了OP原始代码中任何个人的
findall()
尝试。
{'gender': 'male', 'age': '30', 'colour': 'red', 'language': 'python'}