Попытка извлечь список из значений в сложных вложенных XML полях, используя python - PullRequest
0 голосов
/ 27 марта 2020

я пытаюсь получить список значений полей 'RS1 / row / DEVICE_ID' и значения 'RS2 / row / COUNTS' отдельно от этого xml ответа, который у меня есть:

<?xml version="1.0"?>
<doc>
<md_dev.get_device_list status="0">
<RS1>
<row ROWNUM="1" DEVICE_ID="56378346" SERIAL="" MAC_ADDRESS="601BECBA14D9" IP_ADDRESS="127.0.0.1" STATUS="A" SMART_CARD_NUM="" CUSTOMER_ID="6473876" CST_NAME="STANDALONE,  " DHCP="N" REGISTRATION_NUM="" REBOOT_STATUS="" DEVICE_NAME="test_device" PRIORITY="" DEVICE_TYPE="phone" />
<row ROWNUM="2" DEVICE_ID="86574563" SERIAL="" MAC_ADDRESS="D9170B346DAF" IP_ADDRESS="127.0.0.1" STATUS="A" SMART_CARD_NUM="" CUSTOMER_ID="6473876" CST_NAME="STANDALONE,  " DHCP="N" REGISTRATION_NUM="" REBOOT_STATUS="" DEVICE_NAME="test_device" PRIORITY="" DEVICE_TYPE="phone" />
<row ROWNUM="3" DEVICE_ID="14134351" SERIAL="" MAC_ADDRESS="4ECE5EA9876D" IP_ADDRESS="127.0.0.1" STATUS="A" SMART_CARD_NUM="" CUSTOMER_ID="6473876" CST_NAME="STANDALONE,  " DHCP="N" REGISTRATION_NUM="" REBOOT_STATUS="" DEVICE_NAME="Linux x86_64" PRIORITY="1" DEVICE_TYPE="phone" />
<row ROWNUM="4" DEVICE_ID="97653524" SERIAL="" MAC_ADDRESS="BC644B736870" IP_ADDRESS="127.0.0.1" STATUS="A" SMART_CARD_NUM="" CUSTOMER_ID="6473876" CST_NAME="STANDALONE,  " DHCP="0" REGISTRATION_NUM="" REBOOT_STATUS="" DEVICE_NAME="test_device" PRIORITY="" DEVICE_TYPE="phone" />
<row ROWNUM="5" DEVICE_ID="76452782" SERIAL="" MAC_ADDRESS="abcd1f89869e" IP_ADDRESS="127.0.0.1" STATUS="A" SMART_CARD_NUM="" CUSTOMER_ID="6473876" CST_NAME="STANDALONE,  " DHCP="N" REGISTRATION_NUM="" REBOOT_STATUS="" DEVICE_NAME="test_device" PRIORITY="" DEVICE_TYPE="phone" />
</RS1>
<RS2>
<row PAGES="1" COUNTS="5" />
</RS2>
</md_dev.get_device_list>
</doc>

I Я пытался, но безуспешно, чтобы получить это так:

from bs4 import BeautifulSoup

...

r = requests.get( ... )

soup = BeautifulSoup(r.text, "xml")

figure = soup.findAll('row')

for i in figure:
    print(i['DEVICE_ID'])

Но я имею эту ошибку:

(List of devices IDs)

...

Traceback (most recent call last):
  File "scripts/removeUserDevices.py", line 137, in <module>
    print(i['DEVICE_ID'])
  File "/home/user/.local/lib/python3.8/site-packages/bs4/element.py", line 1321, in __getitem__
    return self.attrs[key]
KeyError: 'DEVICE_ID'

1 Ответ

1 голос
/ 29 марта 2020

Использование l xml и xpath:

Devices = """your xml above"""

from lxml import etree
doc = etree.fromstring(devices)
doc.xpath('//row/@DEVICE_ID')

Вывод:

['56378346', '86574563', '14134351', '97653524', '76452782']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...