如何使用 Element Tree 测试 XML 节点是否具有特定字符串
How to test if an XML node has a specific string using Element Tree
我目前正在使用 Element Tree 来解析一些 XML,其中一些有多个重复的 name/value 对,看起来像这样。我想做的是提取感兴趣的元素,即 gender = male 和 color = red 但由于结构原因,我似乎无法单独使用 findall 来完成此操作。
我如何提取这些元素?我认为正确的逻辑是寻找一个子节点,在那里我可以找到 child.text = 'gender' 等等,然后继续并从该子节点打印出 name/values。执行此操作的最佳方法是什么?
<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>
与其尝试处理 XML 文档结构来进行此类查询,我会 制作更方便的数据结构 以基于此进行查询kind of characteristics - 一个以特征名称作为键,特征值作为值的字典。
类似于:
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': 'male', 'age': '30', 'colour': 'red', 'language': 'python'}
现在,获取 gender
值就像 characteristics['gender']
一样简单。
我目前正在使用 Element Tree 来解析一些 XML,其中一些有多个重复的 name/value 对,看起来像这样。我想做的是提取感兴趣的元素,即 gender = male 和 color = red 但由于结构原因,我似乎无法单独使用 findall 来完成此操作。 我如何提取这些元素?我认为正确的逻辑是寻找一个子节点,在那里我可以找到 child.text = 'gender' 等等,然后继续并从该子节点打印出 name/values。执行此操作的最佳方法是什么?
<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>
与其尝试处理 XML 文档结构来进行此类查询,我会 制作更方便的数据结构 以基于此进行查询kind of characteristics - 一个以特征名称作为键,特征值作为值的字典。
类似于:
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': 'male', 'age': '30', 'colour': 'red', 'language': 'python'}
现在,获取 gender
值就像 characteristics['gender']
一样简单。