2015-10-20 49 views
1

我有很多通过Google地理API获取的XML文件。我感兴趣的标签的价值LONG_NAME其中标签包含的价值路线查找XML标记值并选择包含请求标记值的父项

我可以选择用下面的代码将该值:

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 

不幸的是指数(以这个例子中的索引是1)期望的XML标签有时会改变,所以我不会每次都得到路由标签。所以我寻找一种策略,首先寻找类型值路线,然后选择以前的兄弟姐妹。

回答

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