Отладка xml ElementTrees в Python - PullRequest
       5

Отладка xml ElementTrees в Python

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

У меня есть строка XML

xml_str = '<Foo><Bar>burp</Bar></Foo>'

Я анализирую ее с помощью xml etree

import xml.etree.ElementTree as ET
root_element = ET.fromstring(xml_str)

Это создает объект Element (root_element) с тегом, tail, text,и приписать ценности в нем. Я вижу их все при отладке. Тем не менее, я не вижу дочерних элементов при отладке. Я знаю, что дети там, потому что я могу получить к ним доступ в цикле for.

for child in root_element:
    *break point here*

Ниже приведен скриншот того, что я вижу

debugger

Есть ли способ увидеть все элементы одновременно во время отладки? И это проблема, потому что анализатор XML - это анализатор JIT или что-то?

1 Ответ

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

Похоже, вы хотите видеть доступные элементы в XML-документе, который вы хотите проанализировать.

В этом списке будет все дочерние теги корневого элемента

all_children = list(root_element.iter())

Это приведет к

[<Element 'Foo' at 0x11b315908>, <Element 'Bar' at 0x11b315c28>]

Этот вывод, однако, не учитывает «форму» XML.

Когда я хочу проанализировать XML, мне проще использовать ElementTree, но мой первый опыт разбора XML был с BeautifulSoup. Мне все еще нравится функция prettify ().

Этот код,

pretty = ""
soup = BeautifulSoup(xml_str, 'html.parser') 
for value in soup.find_all("foo"):
    pretty += value.prettify()

производит этот вывод

print(pretty)

<foo>
 <bar>
  burp
 </bar>
</foo>

Вы можете заменить find_all () конкретными элементами, которые вывозможно, ищу.

...