如何提取与python中另一个标记同名的xml标记内的数据?

如何提取与python中另一个标记同名的xml标记内的数据?,python,xml,parsing,tags,Python,Xml,Parsing,Tags,各位!!我正在尝试创建一个使用谷歌地理编码API(XML)的应用程序。这是我正在处理的XML数据: <GeocodeResponse> <status>OK</status> <result> <type>establishment</type> <type>point_of_interest</type> <type>university</type> &

各位!!我正在尝试创建一个使用谷歌地理编码API(XML)的应用程序。这是我正在处理的XML数据:

<GeocodeResponse>
 <status>OK</status>
 <result>
  <type>establishment</type>
  <type>point_of_interest</type>
  <type>university</type>
  <formatted_address>77 Massachusetts Ave, Cambridge, MA 02139, USA</formatted_address>
  <address_component>
   <long_name>77</long_name>
   <short_name>77</short_name>
   <type>street_number</type>
  </address_component>
  <address_component>
   <long_name>Massachusetts Avenue</long_name>
   <short_name>Massachusetts Ave</short_name>
   <type>route</type>
  </address_component>
  <address_component>
   <long_name>Area 2/MIT</long_name>
   <short_name>Area 2/MIT</short_name>
   <type>neighborhood</type>
   <type>political</type>
  </address_component>
  <address_component>
   <long_name>Cambridge</long_name>
   <short_name>Cambridge</short_name>
   <type>locality</type>
   <type>political</type>
  </address_component>
  <address_component>
   <long_name>Middlesex County</long_name>
   <short_name>Middlesex County</short_name>
   <type>administrative_area_level_2</type>
   <type>political</type>
  </address_component>
  <address_component>
   <long_name>Massachusetts</long_name>
   <short_name>MA</short_name>
   <type>administrative_area_level_1</type>
   <type>political</type>
  </address_component>
  <address_component>
   <long_name>United States</long_name>
   <short_name>US</short_name>
   <type>country</type>
   <type>political</type>
  </address_component>
  <address_component>
   <long_name>02139</long_name>
   <short_name>02139</short_name>
   <type>postal_code</type>
  </address_component>
  <geometry>
   <location>
    <lat>42.3600910</lat>
    <lng>-71.0941600</lng>
   </location>
   <location_type>ROOFTOP</location_type>
   <viewport>
    <southwest>
     <lat>42.3587420</lat>
     <lng>-71.0955090</lng>
    </southwest>
    <northeast>
     <lat>42.3614400</lat>
     <lng>-71.0928110</lng>
    </northeast>
   </viewport>
  </geometry>
  <place_id>ChIJh2oa9apw44kRPCAIs6WO4NA</place_id>
 </result>
</GeocodeResponse>

好啊
建立
关注点
大学
美国马萨诸塞州剑桥市马萨诸塞大道77号,邮编02139
77
77
街道号码
马萨诸塞大道
马萨诸塞大道
路线
区域2/麻省理工学院
区域2/麻省理工学院
邻里
政治的
剑桥
剑桥
地点
政治的
米德尔塞克斯县
米德尔塞克斯县
行政区二级
政治的
马萨诸塞州
文科硕士
行政区一级
政治的
美国
美国
国家
政治的
02139
02139
邮政编码
42.3600910
-71.0941600
屋顶
42.3587420
-71.0955090
42.3614400
-71.0928110
ChIJh2oa9apw44kRPCAIs6WO4NA
我正在尝试通过XML数据提取县:

<address_component>
   <long_name>Middlesex County</long_name>
   <short_name>Middlesex County</short_name>
   <type>administrative_area_level_2</type>
   <type>political</type>
  </address_component>

米德尔塞克斯县
米德尔塞克斯县
行政区二级
政治的

但是,XML数据中的其他标记使用相同的名称“address\u component”和“long\u name”。由于没有与这些标记关联的属性,因此我无法找到所需的特定数据。有谁能帮助我如何使用python浏览XML数据并找到我需要的确切数据,尽管标记具有相同的名称?

如果您的目的是获得带有子元素
type=administrative\u area\u level\u 2
地址组件
,您可以迭代XML并选择所需的元素:

import xml.etree.ElementTree as ET
root = ET.fromstring("your xml string")

def find_by_tag(tag, add_type= "administrative_area_level_2"):
    for address in root.iter("address_component"):
        if address.find("type").text == add_type:
            return address.find(tag).text
    return None
您可以使用函数
按标签查找
来获取
长\u名称

find_by_tag("long_name")
## 'Middlesex County'
或其他标签,例如:

find_by_tag("short_name")
## 'Middlesex County'
find_by_tag("short_name", "postal_code")
## '02139'

如果您打算使用子元素
type=administrative\u area\u level\u 2
获取
address\u组件
,则可以迭代XML并选择所需元素:

import xml.etree.ElementTree as ET
root = ET.fromstring("your xml string")

def find_by_tag(tag, add_type= "administrative_area_level_2"):
    for address in root.iter("address_component"):
        if address.find("type").text == add_type:
            return address.find(tag).text
    return None
您可以使用函数
按标签查找
来获取
长\u名称

find_by_tag("long_name")
## 'Middlesex County'
或其他标签,例如:

find_by_tag("short_name")
## 'Middlesex County'
find_by_tag("short_name", "postal_code")
## '02139'

谢谢你的信息!我已经找到了我一直试图获取的XML代码块。但是,我如何使用它?我尝试了很多不同的find函数来获取“long_name”标记,但它不起作用。似乎我对下一步该做什么感到困惑,所以请有人解释一下我应该如何处理这些数据!感谢黄先生,他已经回复了@我编辑了我的答案。希望它对你有用。谢谢你提供的信息!我已经找到了我一直试图获取的XML代码块。但是,我如何使用它?我尝试了很多不同的find函数来获取“long_name”标记,但它不起作用。似乎我对下一步该做什么感到困惑,所以请有人解释一下我应该如何处理这些数据!感谢黄先生,他已经回复了@我编辑了我的答案。希望对你有用。