#python #python_3x #xml #xmlparser
есть xml типа <Список> <Актуальный список> <Заключение> <Объект> <Объект> <Объект> Заключение> <Заключение> <Объект> Заключение> Актуальный список> Список> Блоков "Заключение" достаточно большое количество, а подблоков "Объект" в этих блоках не фиксировано. На данный момент код парсит только первые подблоки и дальше не проваливается. Как реализовать проверку всех подблоков и возможную более глубокую вложенность? Заранее спасибо за ответ. #!/usr/bin/env python # -*- coding: utf-8 -*- # vim:fileencoding=utf-8 import xml.etree.ElementTree as ET import csv tree = ET.parse("data.xml") root = tree.getroot() # открываем файл для записи file_out = open('file_out.csv', 'w', newline='') # создаем шапку csvwriter = csv.writer(file_out, delimiter=';') columns = ["AdditionalReason","StartDate"] csvwriter.writerow(columns) count = 0 for member in root.find('АктуальныйСписок').findall('Заключение'): mass =[] # AdditionalReason additional_reason = member.find('ВидЗаключения').find('Идентификатор').text mass.append('приостановление' if additional_reason == '1' else '') # StartDate start_date = member.find('ДатаЗаключения').text mass.append(start_date) csvwriter.writerow(mass) count += 1 file_out.close()
Ответы
Ответ 1
Используйте функцию iter для поиска на любов уровне вложенности нужного тега. Модифицированный файл: <Список> <АктуальныйСписок> <Заключение> <Объект/> <Объект/> <Объект/> Заключение> <Заключение> <Объект/> Заключение> <Другое> <Второе> <Заключение> <Объект/> <Объект/> <Объект/> Заключение> Второе> Другое> АктуальныйСписок> Список> Код: import xml.etree.ElementTree as ET tree = ET.parse("data.xml") root = tree.getroot() # Поиск тегов <Заключение> на любом уровне for member in root.iter('Заключение'): print(member) # Перебор детей <Объект> for obj in member.findall('Объект'): print(' ', obj) print() Консоль:
Комментариев нет:
Отправить комментарий