提问人:ruoooooooolan 提问时间:1/20/2023 最后编辑:petezurichruoooooooolan 更新时间:1/20/2023 访问量:78
如何从这个复杂而奇怪的 XML 中访问值?(子类)
How can I access the value from this complex and strange 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>
我尝试使用此代码打印出“Convergence”的所有属性,但它只给了我一个空输出。 多谢!
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)`
答:
2赞
Daniel Haley
1/20/2023
#1
你的xpath没有多大意义。.findall()
也许不是先做一个,然后再做一个,你只是做一个谓词的findall.......iter()
.findall()
Object
import xml.etree.ElementTree as ET
tree = ET.parse("simulation.xml")
for prop in tree.findall(".//Object[@name='Convergence']/Property"):
print(prop.attrib)
这将打印元素的属性(是具有每个属性名称/值的字典),这些元素是 when 的子元素,其属性值为 。.attrib
Property
Object
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'}
评论
1赞
kjhughes
1/20/2023
对于您的代码来说,“复杂而奇怪”的 XML 是简单而熟悉的。;-)
0赞
Daniel Haley
1/20/2023
@kjhughes - 大声笑
0赞
ruoooooooolan
1/20/2023
@kjhughes,哈哈,这是给你们的简单而熟悉的:)
1赞
ruoooooooolan
1/20/2023
@kjhughes,谢谢你提醒我,我已经做到了。
评论