有没有办法直接在xml中获取属性文本而无需遍历python中的elementree中的子项

时间:2014-01-25 01:28:44

标签: python xml elementtree

我正在使用python module : xml.etree.ElementTree来解析xml文件。 我很想知道是否有办法直接找到一个深层嵌套的属性。 例如,如果我想得到name attribute的neigbhor(如果它存在), 如果我的根是country/rank/year/gdppc,我需要遍历data。有没有快速查找该属性的方法?

<data>
    <country name="Liechtenstein">
        <rank>
           <year>
                 <gdppc>
                       <neighbor name="Austria" direction="E"/>
                 </gdppc>
           </year>
         </rank>
    </country>
</data>

编辑: 我在这条线上尝试了一些东西。但没有帮助;我不确定是否应该resp.content使用xml已审核的

resp=requests.get(url_fetch,params=query)    
    with open(resp.content) as fd:
        doc = ElementTree.parse(fd)
        name = doc.find('PubmedArticle//Volume').text
        print name

这是xml:

1 个答案:

答案 0 :(得分:1)

根据您的数据样子以及您要完成的内容,您可以执行以下操作:

with open('data.xml') as fd:
    doc = ElementTree.parse(fd)
    name = doc.find('country[@name="Liechtenstein"]//neighbor').get('name')
    print name

根据上面的输入会产生:

Austria

如果您使用Python解析XML,您可能需要查看lxml模块,该模块完全支持XPath查询。

这适用于我上面提供的网址:

#!/usr/bin/python

import requests
from xml.etree import ElementTree

res = requests.get('http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&id=24059499&retmode=xml')
doc = ElementTree.fromstring(res.content)
ele = doc.find('.//PubmedArticle//Volume')
print ele.text