如何基于ElementTree元素的name值解析对应的value值?
根据指定name值获取XML中对应的value值
场景说明
使用ElementTree模块解析requests返回的XML,其中<callvariables>标签下包含多组<CallVariable>节点,示例结构如下:
<callvariables> <CallVariable> <name>callVariable1</name> <value>Client</value> </CallVariable> <CallVariable> <name>callVariable2</name> <value>1234567890</value> </CallVariable> <CallVariable> <name>callVariable3</name> <value>Illinois</value> </CallVariable> ........ </callvariables>
现有代码可遍历获取所有name和value:
for child in root.findall('.//CallVariable'): name = child.find('.//name') value = child.find('.//value') print(name.text, value.text)
解决方案
方法1:构建字典实现快速查询(适合多次查询)
先将所有<CallVariable>节点的name和value存入字典,之后可直接通过name键获取对应值:
import xml.etree.ElementTree as ET # 假设root是已解析完成的XML根节点 call_var_dict = {} for var in root.findall('.//CallVariable'): name_node = var.find('name') value_node = var.find('value') if name_node is not None and value_node is not None: call_var_dict[name_node.text] = value_node.text # 查询指定name的value print(call_var_dict.get('callVariable1')) # 输出: Client print(call_var_dict.get('callVariable3')) # 输出: Illinois # 若name不存在,可指定默认值 print(call_var_dict.get('callVariableX', '未找到')) # 输出: 未找到
方法2:使用XPath直接定位(适合单次查询)
通过XPath表达式精准匹配目标name对应的<value>节点,无需遍历所有节点:
target_name = 'callVariable2' # 构造XPath,匹配包含指定name的CallVariable节点下的value value_node = root.find(f".//CallVariable[name='{target_name}']/value") if value_node: print(value_node.text) # 输出: 1234567890 else: print(f"不存在name为{target_name}的节点")
内容的提问来源于stack exchange,提问作者Chad
相关产品推荐
相关产品推荐

