Python解析XML:如何获取Convergence对象属性及Molar Flow值?
解决XML读取Convergence节点属性的问题
原代码问题分析
- XPath表达式错误:原代码
root.findall("./[@object = 'Convergence']")既未指定目标节点为Object,属性名也写错(目标属性是name而非object),导致无法定位到目标节点。 - 逻辑错误:遍历所有
Property节点后,判断该节点是否属于findall返回的结果,但findall找的是Object节点,Property是其子节点,两者不可能相等,因此永远不会触发打印。
需求1:读取Convergence节点下的所有Property属性
先定位到name为Convergence的Object节点,再遍历其下的所有Property子节点,输出属性:
import xml.etree.ElementTree as ET tree = ET.parse("simulation.xml") root = tree.getroot() # 定位目标Object节点 convergence_obj = root.find("./Object[@name='Convergence']") if convergence_obj is not None: # 遍历所有子Property节点并输出属性 for prop in convergence_obj.findall("./Property"): print(prop.attrib)
需求2:获取Molar Flow属性的value值
直接通过XPath定位到Convergence节点下的Molar Flow属性节点,提取其value值:
import xml.etree.ElementTree as ET tree = ET.parse("simulation.xml") root = tree.getroot() # 精准定位目标Property节点 molar_flow_prop = root.find("./Object[@name='Convergence']/Property[@name='Molar Flow']") if molar_flow_prop is not None: molar_flow_value = molar_flow_prop.get("value") print(f"Molar Flow value: {molar_flow_value}")
内容的提问来源于stack exchange,提问作者ruoooooooolan
相关产品推荐
相关产品推荐

