#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() Консоль:
Комментариев нет:
Отправить комментарий