Как извлечь данные из XML с помощью LXML? - PullRequest
0 голосов
/ 15 ноября 2018

У меня проблема с извлечением данных из XML-файла, который содержит lxml. Я пытался извлечь данные с использованием библиотеки lxml, но у меня нет вывода вообще.

from lxml import etree 
tree = etree.parse("ifm-00028A-20170711-IODD1.1.xml")
root = tree.getroot()
levels = root.findall('DeviceIdentity', root.nsmap)
for DeviceIdentity in levels:
data_1 = int(DeviceIdentity.find('deviceId').text)
print(data_1)

[IODD] [1]

Мне нужно, например, получить значение из vendorId и deviceId

Спасибо за помощь!

Образец XML-файла https://i.stack.imgur.com/Ih4Tk.png

1 Ответ

0 голосов
/ 15 ноября 2018

Здесь есть две ошибки.

Во-первых, findall findall ищет только непосредственных потомков элемента, если ему дано имя тега . Вы можете использовать выражения XPath для более глубокого поиска. Так что ваш findall должен быть

levels = root.findall('.//DeviceIdentity', root.nsmap)

Тогда deviceId является атрибутом . Вы должны быть в состоянии найти его в словаре attrib элемента. Если предположить, что остальная часть вашего кода верна, это будет выглядеть примерно так:

for DeviceIdentity in levels:
    data_1 = int(DeviceIdentity.attrib['deviceId'])
    print(data_1)

(В будущих вопросах было бы полезно включить образец XML в виде текста и быть более конкретным, чем «вообще ничего не выводить»)

...