Добавление тегов в 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>
→ Ссылка