查找 XML 标签值和 select 包含所请求标签值的父项

Look for XML tag value and select the parent which contains the requested tag value

我有很多 XML 文件是通过 Google Geo API 获得的。我对标签 long_name 的值感兴趣,其中 type 标签包含值 route

我可以使用以下代码 select 这个值:

from bs4 import BeautifulSoup as bs

xml_data = '''
<result>
    <formatted_address>Pariser Platz, 10117 Berlin, Deutschland</formatted_address>
    <address_component>
        <long_name>Pariser Platz</long_name>
        <type>route</type>
    </address_component>
    <address_component>
        <long_name>Mitte</long_name>
    <type>sublocality_level_1</type>
    </address_component>
</result>
'''

bsObj = bs(xml_data, 'html.parser')

bsObj.find_all('long_name')[1].string

不幸的是,所需 XML 标签的索引(在本例中为 1)有时会发生变化,因此我不会每次都获得路由标签。所以我正在寻找一种策略,首先查找类型值路由,然后 select 前一个兄弟。

对于文本等于 route 的第一个 type 标记的前一个 long_name 同级 select,使用:

long_name_tag = bsObj.find('type', text='route').findPreviousSibling('long_name')

或者,对于 return 来自相关 long_name 标签的文本字符串,使用:

long_name_tag_text = bsObj.find('type', text='route').findPreviousSibling('long_name').text