检索具有标记的元素 - Python中的XML

时间:2017-05-01 01:45:26

标签: python xml elementtree

从下面的示例xml

<?xml version="1.0"?>
    <data>
        <country>
            <name>Liechtenstein</name>
            <rank>1</rank>
            <year>2008</year>
            <gdppc>141100</gdppc>
            <neighbor name="Austria" direction="E"/>
            <neighbor name="Switzerland" direction="W"/>
        </country>
        <country>
            <name>Singapore</name>
            <rank>4</rank>
            <year>2011</year>
            <gdppc>59900</gdppc>
            <neighbor name="Malaysia" direction="N"/>
        </country>
        <country>
            <name>Panama</name>
            <rank>68</rank>
            <year>2011</year>
            <gdppc>13600</gdppc>
            <neighbor name="Costa Rica" direction="W"/>
            <neighbor name="Colombia" direction="E"/>
        </country>
    </data>

使用Python ElementTree

import xml.etree.ElementTree as ET
tree = ET.parse('test.xml')


for elem in tree.iter(tag='name'):
    print (elem.tag)

显示三个名称元素。如何使用特定文本只检索一个名称元素<name>Panama</name>

for elem in tree.iter(tag="name='panama'"):无效

2 个答案:

答案 0 :(得分:1)

import xml.etree.ElementTree as ET

tree = ET.parse('test.xml')
countries = tree.findall("country")
for country in countries:
    name = country.find("name")
    if name.text == "Panama":
        print(name.text)

另外,请注意您的xml格式不正确。你有一个]而不是一个&gt;在test.xml的第19行

答案 1 :(得分:1)

您可以考虑在xpath中使用lxml。使用text()可以让您找到巴拿马&#39;作为一个元素的内容很快。完成后,您可以导航到同一国家/地区的相邻信息项。

>>> from lxml import etree
>>> tree = etree.parse('test.xml')
>>> tree.xpath('.//name/text()')
['Liechtenstein', 'Singapore', 'Panama']
>>> for item in tree.xpath('.//name/text()'):
...     if item == 'Panama':
...         for cousins in item.getparent().getparent().getchildren():
...             cousins.text
...             
'Panama'
'68'
'2011'
'13600'