Python получить элемент XML по пути - PullRequest
0 голосов
/ 30 октября 2019

Я пытаюсь пройтись по большому XML-файлу и собрать некоторые данные. Поскольку местоположение данных можно найти по пути, я использовал xpath, но безрезультатно.

Может кто-нибудь подсказать, что я делаю неправильно?

Пример xml:

<?xml version="1.0" encoding="UTF-8"?>
<rootnode>
    <subnode1>

    </subnode1>
    <subnode2>

    </subnode2>
    <subnode3>
        <listnode>
            <item id="1"><name>test name1</name></item>
            <item id="2"><name>test name2</name></item>
            <item id="3"><name>test name3</name></item>
        </listnode>
    </subnode3>
</rootnode>

Код:

import lxml.etree as ET

tree = ET.parse('temp/temp.xml')

subtree = tree.xpath('./rootnode/subnode3/listnode')

for next_item in subtree:
    Id = next_item.attrib.get('id')
    name = next_item.find('name').text
    print('{:>20} - {:>20}'.format(name,Id))

1 Ответ

0 голосов
/ 30 октября 2019

Вы очень близки.

Пример:

import lxml.etree as ET

tree = ET.parse('temp/temp.xml')

subtree = tree.xpath('/rootnode/subnode3/listnode')
for next_item in subtree:
    for item in next_item.findall('item'):
        Id = item.attrib.get('id')
        name = item.find('name').text
        print('{:>20} - {:>20}'.format(name,Id))

ИЛИ

subtree = tree.xpath('/rootnode/subnode3/listnode/item')
for item in subtree:
    Id = item.attrib.get('id')
    name = item.find('name').text
    print('{:>20} - {:>20}'.format(name,Id))  

Вывод:

  test name1 -                    1
  test name2 -                    2
  test name3 -                    3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...