查找XML标记值并选择包含所请求标记值的父标记

时间:2015-10-20 11:59:47

标签: python xml beautifulsoup

我通过Google Geo API获得了很多XML文件。我对 long_name 标记的价值感兴趣,其中类型标记包含值 route

我可以使用以下代码选择此值:

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)有时会发生变化,因此每次都不会获取路径标记。所以我正在寻找一种策略,首先寻找类型值路由,然后选择以前的兄弟。

1 个答案:

答案 0 :(得分:1)

要选择文本等于long_name的第一个type代码的上一个route兄弟,请使用:

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

或者,要从相关的long_name标记返回文本字符串,请使用:

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