[英]Parsing a XML in Python using ElementTree with repeat elements
I have an XML file that is structured like我有一个 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>
I would like to retrieve the values of "Vertices".我想检索“顶点”的值。 How can I do this with python's native XML parser ElementTree?
如何使用 python 的本机 XML 解析器 ElementTree 执行此操作? Thanks!
谢谢!
Use xml.etree.ElementTree.Element.findall
with an XPath expression that selects all Vertices
tags on all levels beneath the root.将
xml.etree.ElementTree.Element.findall
与 XPath 表达式一起使用,该表达式选择根下所有级别上的所有Vertices
标记。
See https://docs.python.org/3/library/xml.etree.elementtree.html#supported-xpath-syntax请参阅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: 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.