python xml .findall () возвращает пустой список - PullRequest
0 голосов
/ 31 октября 2019

Я стараюсь разобрать строку xml, но при поиске дочерних элементов она возвращает пустой список. Я могу предоставить рабочую скрипку Python:

https://onlinegdb.com/SytNQIOcS

, но это сводится к следующему:

root = ET.fromstring(xml_string)
print(root.findall('Race'))

Любые советы? Похоже, ошибка новичка ..

1 Ответ

0 голосов
/ 31 октября 2019
root = ET.fromstring(xml_string)
namespace = {'ns': 'http://ergast.com/mrd/1.4' }

for race in root.find('ns:RaceTable', namespace):
    round_num = race.get("round")
    circuit = race.find('ns:RaceName', namespace).text
    date = race.find("ns:Date", namespace).text
    time = race.find("ns:Time", namespace).text
    print(round_num, circuit, date, time)

Ошибки:

  1. Element.findall () находит только элементы с тегом, которые являются прямыми дочерними элементами текущего элемента.
  2. Если вход XML имеет пространства имен, теги и атрибуты с префиксами в префиксе формы: sometag расширяется до {uri} sometag, где префикс заменяется полным URI. Кроме того, если есть пространство имен по умолчанию, этот полный URI добавляется ко всем тегам без префикса. Ознакомьтесь с этой документацией https://docs.python.org/2/library/xml.etree.elementtree.html#parsing-xml-with-namespaces

Вы можете использовать что-то вроде этого

...