Frage

Wie Klon Element Objekte in Python xml.etree? Ich versuche, prozedural zu verschieben und kopieren Knoten (dann ihre Attribute ändern).

War es hilfreich?

Lösung

Sie können einfach verwenden copy.deepcopy () eine Kopie des Elements machen. (Dies wird auch die Arbeit mit lxml durch die Art und Weise).

Andere Tipps

Eine andere, etwas zu stören Lösung:

new_element = lxml.etree.fromstring(lxml.etree.tostring(elem))

Mindestens in Python 2.7 etree Element hat eine Kopiermethode: http://hg.python.org/cpython /file/2.7/Lib/xml/etree/ElementTree.py#l233

Es ist eine flache Kopie, aber das ist in einigen Fällen vorzuziehen.

In meinem Fall habe ich einige SVG-Elemente am duplizieren und das Hinzufügen einer Transformation. Duplizierung Kinder würde jeden Zweck nicht dienen, da wo relevant sie bereits erben ihre Eltern verwandeln.

Wenn Sie einen Griff an der Element elem des parent haben, können Sie rufen Sie

new_element = SubElement(parent, elem.tag, elem.attrib)

Ansonsten könnten Sie versuchen

new_element = makeelement(elem.tag, elem.attrib)

aber dies wird nicht empfohlen.

Für die Zukunft.

Einfachste Weg, um einen Knoten (oder Baum) zu kopieren und die Kinder zu halten, ohne zu importieren, die ANOTHER Bibliothek nur für diese:

def copy_tree( tree_root ):
    return et.ElementTree( tree_root );

duplicated_node_tree = copy_tree ( node );    # type(duplicated_node_tree) is ElementTree
duplicated_tree_root_element = new_tree.getroot();  # type(duplicated_tree_root_element) is Element
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top