Получить текст в подэлементе с заданным другим подэлементом - PullRequest
0 голосов
/ 20 марта 2020

Ниже приведен пример XML:

<data>
    <country >
        <name> London </name>
        <rank>1</rank>
        <year>2008 </year>
    </country> 
</data>

Задание, данное для меня: Учитывая Лондон в качестве входных данных, программа покажет данные в ранге и году

Я получу sh, чтобы найти его ниже, когда найду 'Лондон' в своей программе.

rank = 1
year = 2008 

Я знал только, как получить данные в определенном теге; ie: найти 'rank', который даст вывод 'rank: 1'

for country in root.findall('country'):
rank = country.find('rank')
print 'rank:' , rank.text

1 Ответ

0 голосов
/ 21 марта 2020

Ниже

import xml.etree.ElementTree as ET


xml = '''<data>
    <country >
        <name>London</name>
        <rank>1</rank>
        <year>2008</year>
    </country> 
    <country >
        <name>Paris</name>
        <rank>4</rank>
        <year>2004</year>
    </country> 
</data>'''

def get_country_by_name(name):
  # assuming the 'name' is unique in the xml doc
  country_with_name = [e for e in root.findall('.//country') if e.find('name').text==name][0]  
  return country_with_name.find('rank').text,country_with_name.find('year').text


root = ET.fromstring(xml)
rank,year = get_country_by_name('London')
print(rank,year)
rank,year = get_country_by_name('Paris')
print(rank,year)
...