使用子节点获取父节点 lxml python
对于这个 xml
文件,
xmldata="""
<locations>
<continent region="Africa" >
<country id="84" countryname="Algeria" ></country>
</continent>
<continent region="Asia" >
<country id="84" countryname="India" ></country>
</continent>
<continent region="America" >
<country id="84" countryname="Mexico" ></country>
</continent>
</locations>
"""
我想通过国家名称来获取地区名称。如果国家名称是 India
,那么代码应该返回 Asia
。
我尝试过的方式是,
import lxml.etree as ET
root = ET.fromstring(xmldata)
flag=False
continent=""
country=""
for neighbor in root.iter('continent'):
for i in neighbor.iter("country"):
if i.attrib.get('countryname')=="India":
flag=True
continent=neighbor.attrib.get('region')
country=i.attrib.get('countryname')
if flag==True:
break
print 'Continent is ',continent , 'And country is ', country
这个代码可以运行,但这样做不太方便。
我该如何使用 xpath
表达式来实现这个目标呢?
1 个回答
1
使用这个 xpath 表达式://continent[./country/@countryname="India"]/@region
:
>>> import lxml.etree as ET
>>> xmldata="""
... <locations>
...
... <continent region="Africa" >
... <country id="84" countryname="Algeria" ></country>
... </continent>
...
... <continent region="Asia" >
... <country id="84" countryname="India" ></country>
... </continent>
...
... <continent region="America" >
... <country id="84" countryname="Mexico" ></country>
... </continent>
...
... </locations>
... """
>>> root = ET.fromstring(xmldata)
>>> print root.xpath('//continent[./country/@countryname="India"]/@region')
['Asia']