Python和lxml:从给定元素获取子子元素

1 投票
1 回答
577 浏览
提问于 2025-04-18 07:02

我有这段XML代码:

<ProceduresDB>
  <Airport ICAOcode="EHRD">
    <Sid Name="ANDI1A" Runways="06">
      <Sid_Waypoint ID="1">
        <Latitude>0.000000</Latitude>
        <Longitude>0.000000</Longitude>
      </Sid_Waypoint>
      <Sid_Waypoint ID="2">
        <Latitude>51.973697</Latitude>
        <Longitude>4.480970</Longitude>
      </Sid_Waypoint>
    <Sid Name="ARNE2A" Runways="06">
      <Sid_Waypoint ID="1">
      etc etc

我想知道怎么才能获取到每个航点的所有纬度和经度,特别是对于SidName='ANDI1A'的情况?

我一直在尝试用lxml来实现这个,但大多数教程都讲的是有嵌套子元素的XML文档。

1 个回答

1

你可以使用 .//Sid[@Name="ANDI1A"]/Sid_Waypoint 这个 xpath 表达式:

import lxml.etree as ET

data = """<ProceduresDB>
  <Airport ICAOcode="EHRD">
    <Sid Name="ANDI1A" Runways="06">
      <Sid_Waypoint ID="1">
        <Latitude>0.000000</Latitude>
        <Longitude>0.000000</Longitude>
      </Sid_Waypoint>
      <Sid_Waypoint ID="2">
        <Latitude>51.973697</Latitude>
        <Longitude>4.480970</Longitude>
      </Sid_Waypoint>
    </Sid>
   </Airport>
</ProceduresDB>"""

tree = ET.fromstring(data)
for waypoint in tree.findall('.//Sid[@Name="ANDI1A"]/Sid_Waypoint'):
    print "Waypoint %s" % waypoint.attrib["ID"]
    for item in waypoint:
        print item.tag, item.text

输出结果是:

Waypoint 1
Latitude 0.000000
Longitude 0.000000
Waypoint 2
Latitude 51.973697
Longitude 4.480970

撰写回答