Добавление тегов в xml файл
Python, библиотека lxml. У меня есть массив элементов, которые мне нужно в цикле упаковать в xml файл. Вот разметка xml.
page = etree.Element("Arrays")
doc = etree.ElementTree(page)
arrayNumber = etree.SubElement(page, "Array" )
id = etree.SubElement(arrayNumber, "id")
id_step = etree.SubElement(arrayNumber, "id_step")
clinic_id = etree.SubElement(arrayNumber, "clinic_id")
patient_id = etree.SubElement(arrayNumber, "patient_id")
birth_dt = etree.SubElement(arrayNumber, "birth_dt")
gender_id = etree.SubElement(arrayNumber, "gender_id")
mo_prik = etree.SubElement(arrayNumber, "mo_prik")
case_type_id = etree.SubElement(arrayNumber, "case_type_id")
name = etree.SubElement(arrayNumber, "name")
code_final = etree.SubElement(arrayNumber, "code_final")
admission_date = etree.SubElement(arrayNumber, "admission_date")
admission_time = etree.SubElement(arrayNumber, "admission_time")
outcome_date = etree.SubElement(arrayNumber, "outcome_date")
outcome_time = etree.SubElement(arrayNumber, "outcome_time")
profil = etree.SubElement(arrayNumber, "profil")
pred_shaq = etree.SubElement(arrayNumber, "pred_shaq")
doc.write("file.xml")
Как мне добавлять в page, arrayNumber и всех его детей динамически в цикле
Ответы (1 шт):
Автор решения: gil9red
→ Ссылка
Значения тегов устанавливаются через поле text
Накидал пример, в котором данные хранятся как список из словарей. Ключом словаря будет имя тега:
from lxml import etree
def append_array(parent_el, data: dict):
arrayNumber = etree.SubElement(parent_el, "Array")
for k, v in data.items():
etree.SubElement(arrayNumber, k).text = v
page = etree.Element("Arrays")
doc = etree.ElementTree(page)
items = [
{
"id": "id_1",
"id_step": "id_step_1",
"clinic_id": "clinic_id_1",
},
{
"id": "id_2",
"id_step": "id_step_2",
"clinic_id": "clinic_id_2",
}
]
for data in items:
append_array(page, data)
doc.write("file.xml")
Результат:
<Arrays>
<Array>
<id>id_1</id>
<id_step>id_step_1</id_step>
<clinic_id>clinic_id_1</clinic_id>
</Array>
<Array>
<id>id_2</id>
<id_step>id_step_2</id_step>
<clinic_id>clinic_id_2</clinic_id>
</Array>
</Arrays>
