如何克隆Element在Python xml.etree对象?我想在程序上移动和复制(然后修改其属性)节点。

有帮助吗?

解决方案

可以只使用 copy.deepcopy()以使元件的副本。 (顺便说一下与LXML这也将工作)。

其他提示

一个不同的,并且有些干扰的解决方案:

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

至少在Python 2.7 etree元件具有复制方法: http://hg.python.org/cpython /file/2.7/Lib/xml/etree/ElementTree.py#l233

它是一种浅拷贝,但是这是在某些情况下是优选的。

在我的情况下,我复制一些SVG元素和添加的变换。复制孩子起不到因为他们已经继承了父母的变换,其中有关的任何目的。

如果您对Element elemparent一个手柄,你可以调用

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

否则,你可能会想尝试

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

,但这不是建议。

有关将来参考。

最简单的方法来复制一个节点(或树),并保持它的孩子,而无需进口的 ANOTHER 库的只有的为:

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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top