如何“重命名”一个xml元素

时间:2013-05-15 15:42:37

标签: java dom

我无法将节点内容(所有子节点)移动到另一个(编辑:保留顺序):

Document document = pathoNode.getOwnerDocument();
Element renamedNode = document.createElement("PATHO");
NodeList children = pathoNode.getChildNodes();
for ( int i=0 ; i<children.getLength() ; i++ ) {
    Node nodeToAdd = children.item(i);
    renamedNode.appendChild( nodeToAdd );
}

当我致电.appendChild( nodeToAdd )时,该节点已从pathoNode移除,但也会从NodeList返回的getChildNodes()移除。

因此,每次迭代时children.getLength()返回的数字都会减少,算法将错过两个元素中的一个。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

向后搜索集合:

for ( int i=children.getLength() - 1; i>=0 ; i-- ) {
    Node nodeToAdd = children.item(i);
    renamedNode.appendChild( nodeToAdd );
}

答案 1 :(得分:0)

我找到了一个“复制”而不是移动节点的解决方案,你只需要传递一个深度复制的节点:

NodeList children = pathoNode.getChildNodes();
for ( int i=0 ; i<children.getLength() ; i++ ) {
    Node nodeToAdd = children.item(i);
    renamedNode.appendChild( nodeToAdd.cloneNode(true) );
}