L XML etree добавить существующий (проанализированный) элемент как подэлемент к другому (проанализированному) элементу - PullRequest
0 голосов
/ 16 июня 2020

У меня есть две структуры XML, xml_1 и xml_2

xml_1 - это структура, которую я создал как таковую:

xml_1 = etree.Element('xml_1_root')

xml_2 - это структура, которую я проанализировал из существующих XML данных как таковых:

xml_2 = etree.parse(xml_2.xml).getroot()

Я бы хотел сделать что-то вроде этого:

for node in xml_2.findall("node"):
    etree.SubElement(xml_1, node)

Так что вся структура из node добавляется как дочерняя к вновь созданной xml_1 структуре.

Проблема в том, что метод SubElement (очевидно) здесь не работает, так как это нецелевое использование.

Мой вопрос: есть ли в библиотеке l xml .etree метод для добавления существующих (проанализированных) элементов в качестве субэлементов, таких как любые атрибуты, текст и информация о дочерних узлах сохраняется?

Проблема в том, что многие из узлов в xml_2 имеют дочерние элементы (многие из которых также имеют детей), и я бы предпочел избежать необходимости рекурсии в их для детального извлечения всей информации.

Примечание : это не вопрос того, как создать * 103 7 * Etree SubElement с нуля. Это вопрос о том, как добавить существующий элемент в другое дерево при сохранении существующей структуры данных.

1 Ответ

0 голосов
/ 16 июня 2020

Мне следовало бы прочитать документы более внимательно.

Библиотека etree предоставляет следующий метод для Element:

append ( subelement) Добавляет подэлемент элемента в конец внутреннего списка подэлементов этого элемента. Вызывает TypeError, если подэлемент не является элементом.

Итак, чтобы добавить существующий xml_2_node в новую структуру xml_1:

xml_1.append(xml_2_node)

...