Скопируйте более 1 указанного узла xml из одного документа в другой, используя python

У меня есть вопрос относительно кода ответа, который я нашел в другом вопросе. Я приложил ссылку для пояснения, но я пойду дальше и скопирую код ответа в этот вопрос.

import xml.etree.ElementTree as ET

def find_child(node, with_name):
    """Recursively find node with given name"""
    for element in list(node):
        if element.tag == with_name:
            return element
        elif list(element):
            sub_result = find_child(element, with_name)
            if sub_result is not None:
                return sub_result
    return None

def replace_node(from_tree, to_tree, node_name):
    """
    Replace node with given node_name in to_tree with
    the same-named node from the from_tree
    """
    # Find nodes of given name ('car' in the example) in each tree
    from_node = find_child(from_tree.getroot(), node_name)
    to_node = find_child(to_tree.getroot(), node_name)

    # Find where to substitute the from_node into the to_tree
    to_parent, to_index = get_node_parent_info(to_tree, to_node)

    # Replace to_node with from_node
    to_parent.remove(to_node)
    to_parent.insert(to_index, from_node)

def get_node_parent_info(tree, node):
    """
    Return tuple of (parent, index) where:
        parent = node's parent within tree
        index = index of node under parent
    """
    parent_map = {c:p for p in tree.iter() for c in p}
    parent = parent_map[node]
    return parent, list(parent).index(node)

from_tree = ET.ElementTree(file='sample1.xml')
to_tree = ET.ElementTree(file='sample2.xml')

replace_node(from_tree, to_tree, 'car')

# ET.dump(to_tree)
to_tree.write('output.xml')

Я использую этот код, предоставленный Дейном, за исключением того, что мне интересно, как сделать еще один шаг вперед. В этой части кода replace_node(from_tree, to_tree, 'car') предоставляется только один узел 'car'. Есть ли способ, которым я мог бы указать несколько узлов, а также несколько дочерних узлов.

Итак, в дополнение к автомобилю, скажем, я хотел бы включить "самолет", "велосипеды: красный", "велосипеды: синий", "велосипеды: зеленый", "поезд" и т. Д.

Я попытался включить их как "машина, самолет, велосипеды: красный, велосипеды: синий, велосипеды: greeen, train"), но это не работает так же хорошо, как создание отдельных строк узла replace_node(from_tree, to_tree, 'car')) код с каждым конкретным узлом и узлом: дочерним, но, похоже, это тоже не работает. Какие-либо предложения?

Как скопировать несколько узлов XML в другой файл в Python

0 ответов

Другие вопросы по тегам