[英]Parsing a XML in Python using ElementTree with repeat elements
我有一个 XML 文件,其结构如下
<?xml version="1.0" encoding="utf-8"?>
<Method>
<Version>1.0</Version>
<Parameter key="IM-MS Browser Method">
<Parameter key="FileOperations">
<Parameter key="CondenseFilePSet">
<Parameter key="AutoFrameSelect">
<Value>True</Value>
</Parameter>
</Parameter>
<Parameter key="MethodBookmark">
<Parameter key="MassRange">
<Value />
</Parameter>
<Parameter key="PolygonRegion">
<Value>
<XUnits>Milliseconds</XUnits>
<YUnits>MassToCharge</YUnits>
<Vertices>
<V x="0.2705684" y="102.2292" />
<V x="59.79562" y="3173.849" />
<V x="0.676421" y="3173.849" />
<V x="0.2705684" y="142.8233" />
</Vertices>
</Value>
</Parameter>
我想检索“顶点”的值。 如何使用 python 的本机 XML 解析器 ElementTree 执行此操作? 谢谢!
将xml.etree.ElementTree.Element.findall
与 XPath 表达式一起使用,该表达式选择根下所有级别上的所有Vertices
标记。
请参阅https://docs.python.org/3/library/xml.etree.elementtree.html#supported-xpath-syntax
import xml.etree.ElementTree as ET
xml_string = r"""<?xml version="1.0" encoding="utf-8"?>
<Method>
<Version>1.0</Version>
<Parameter key="IM-MS Browser Method">
<Parameter key="FileOperations">
<Parameter key="CondenseFilePSet">
<Parameter key="AutoFrameSelect">
<Value>True</Value>
</Parameter>
</Parameter>
</Parameter>
<Parameter key="MethodBookmark">
<Parameter key="PolygonRegion">
<Parameter key="MassRange">
<Value/>
</Parameter>
<Value>
<XUnits>Milliseconds</XUnits>
<YUnits>MassToCharge</YUnits>
<Vertices>
<V x="0.2705684" y="102.2292"/>
<V x="59.79562" y="3173.849"/>
<V x="0.676421" y="3173.849"/>
<V x="0.2705684" y="142.8233"/>
</Vertices>
</Value>
</Parameter>
</Parameter>
</Parameter>
</Method>"""
root = ET.fromstring(xml_string)
# It returns a list of Elements
vertices_tags = root.findall(".//Vertices")
for v_tags in vertices_tags:
for v_tag in v_tags:
print(v_tag.tag, v_tag.attrib)
Output:
V {'x': '0.2705684', 'y': '102.2292'}
V {'x': '59.79562', 'y': '3173.849'}
V {'x': '0.676421', 'y': '3173.849'}
V {'x': '0.2705684', 'y': '142.8233'}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.