繁体   English   中英

使用带有重复元素的 ElementTree 解析 Python 中的 XML

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM