Извлечение определенных дочерних элементов xml из xml, хранящихся в виде байтового типа данных, из переменной в список в python3 - PullRequest
0 голосов
/ 18 мая 2018

Я пишу скрипт на python, который должен получать выходные значения в байтовом формате в переменную.Есть два гнезда для петель.Первый цикл for собирает имя арендатора и помещает его в функцию, чтобы получить список пространств имен внутри него.Этот список пространства имен представляет собой файл XML и выводится в виде байтового типа данных.

Пример показан ниже:

Source = b'<?xml version="1.0" encoding="UTF-8" standalone="yes"?><namespaces><name>Namespacename1</name><name>Namespacename2</name>'

import lxml
from xml.etree import ElementTree as ET

for tenant in tenants:
    c.GET('/mapi/tenants/'+tenant+'/namespaces')#This comes from another sdk so ignore this
    c.response_status # this also is part of the sdk so ignore this
    source = c.read() # This operation is also part of the sdk so ignore this as well
    print(source)
    nslist = et.fromstring(source)

Дело в том, что мне нужно получить много дочерних элементов с именем 'name' из каждого из этих выходных данных xml (в формате "байты")), которая хранится внутри переменной с именем source, и каждое из этих значений 'name' должно быть добавлено в новую переменную списка.

Некоторые из ответов xml пусты, и я продолжаю получать ошибку синтаксического анализа xml, когда япопробуйте перебрать каждый из них, чтобы выполнить это действие.Я попробовал условие if else, чтобы попытаться игнорировать это.Это тоже не удалось!

Я много читал документацию по xml.etree, а также протестировал несколько циклов for.Ничего не помогло, к сожалению.Может ли кто-нибудь помочь мне с этим разобраться?

1 Ответ

0 голосов
/ 02 июня 2018

Я сам нашел ответ на свой вопрос.Я просто использовал опцию enumerate для решения этой проблемы.

Как уже упоминалось в моем примере.У меня есть переменная в формате байтов, содержащая файл XML.Мне нужны были дочерние элементы под названием name из XML-файлов.Я использовал модуль с открытым исходным кодом под названием lxml.Вы также можете использовать модуль xml (ElementTree), встроенный в python3.

Ниже приведено решение.У меня есть переменная с именем source.

source = b'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>.<namespaces><name>Building</name><name>Active</name><name>system</name></namespaces>'

nsinfo = nslist.findall('name')
    for q, value in enumerate(nsinfo):
        nsname = str(value.text)
        print(nsname)

Building
Active
System

Это даст вам конкретное значение из XML-файла, который вы ищете.Задача решена!.

Вы можете посмотреть ссылку ниже, чтобы лучше понять.

https://github.com/Solitarystate/Hitachi-Content-Platform-Capacity-Reporting/blob/master/hcpcapacityreporting_xml.py

...