Как разобрать xml xpath в список python - PullRequest
2 голосов
/ 27 июня 2019

Я пытаюсь получить значения в списке. Мне нужно получить список с этими значениями new_values ​​= ['a', 'b'], используя xpath

import xml.etree.ElementTree as ET
parse = ET.parse('xml.xml')
[ record.find('events').text for record in parse.findall('.configuration/system/') ]

xml.xml file

<rpc-reply>
    <configuration>
            <system>
                <preference>
                    <events>a</events>
                    <events>b</events>                    
                </preference>
            </system>
    </configuration>
</rpc-reply>

Вывод моего кода на Python представляет собой список только с одним значением - ['a'], но мне нужен список с a и b.

Ответы [ 2 ]

2 голосов
/ 27 июня 2019

Оптимизировано для одного .findall() вызова:

import xml.etree.ElementTree as ET

root = ET.parse('input.xml').getroot()
events = [e.text for e in root.findall('configuration/system//events')]

print(events)
  • configuration/system//events - относительный xpath к events элементу (ам)

Выход:

['a', 'b']
2 голосов
/ 27 июня 2019

Вы довольно близко. Вам просто нужно использовать findall('events') и повторить его, чтобы получить все значения.

Ex:

import xml.etree.ElementTree as ET
parse = ET.parse('xml.xml')
print([ events.text for record in parse.findall('.configuration/system/') for events in record.findall('events')])

Выход:

['a', 'b']
...