查找 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
我有很多 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