我如何从这个复杂而奇怪的XML访问值?(subsubsubclass)



我是XML文件的新手。我不知道如何只能从对象"收敛"中读取属性,以及如何访问"摩尔流"的值。

<?xml version="1.0" encoding="utf-8"?>
<Objects>
<Object name="Convergence" type="Material Stream">
<Property name="Temperature" value="20" units="C" />
<Property name="Pressure" value="2" units="bar" />
<Property name="Mass Flow" value="36" units="kg/h" />
<Property name="Molar Flow" value="19" units="mol/h" />
<Object name="P-1, HE-1" type="Material Stream">
<Property name="Temperature" value="25" units="C" />
<Property name="Pressure" value="1" units="bar" />
<Property name="Mass Flow" value="2" units="kg/h" />
<Property name="Molar Flow" value="103" units="mol/h" />
<Property name="Volumetric Flow" value="0.9" units="m3/h" />
</Object>
</Objects>

我试着用这段代码打印出"收敛"的所有属性,但它只给了我一个空的输出。非常感谢!

import xml.etree.ElementTree as ET
tree = ET.parse("simulation.xml")
root = tree.getroot()
for neighbor in root.iter('Property'):
if neighbor in root.findall("./[@object = 'Convergence']"):
print(neighbor.attrib)`

您的.findall()中的xpath没有多大意义。

也许不是先做一个.iter(),然后再做一个.findall(),你只是在Object上用一个谓词做findall…

import xml.etree.ElementTree as ET
tree = ET.parse("simulation.xml")
for prop in tree.findall(".//Object[@name='Convergence']/Property"):
print(prop.attrib)

这将打印Object的子Property元素的属性(.attrib是一个包含每个属性名称/值的字典),当Object有一个属性name的值为Convergence时。

打印输出示例:

{'name': 'Temperature', 'value': '20', 'units': 'C'}
{'name': 'Pressure', 'value': '2', 'units': 'bar'}
{'name': 'Mass Flow', 'value': '36', 'units': 'kg/h'}
{'name': 'Molar Flow', 'value': '19', 'units': 'mol/h'}

最新更新