2013-05-15 52 views
1

我有麻煩移動節點的內容(及其所有子)到另一個(編輯:與訂單被保留):如何「重命名」 XML元素

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中刪除,但也從getChildNodes()返回的NodeList中刪除。

因此,每次我們迭代時,由children.getLength()返回的數字都會減少,並且算法將錯過兩個元素中的一個。

我該如何解決這個問題?

回答

0

我發現了「複製」,而不是移動節點的解決方案,您只需通過一個深深的拷貝節點:

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

去向後通過收集:

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

我需要爲了保持,我很確定這個解決方案反轉它。 – BiAiB

+0

(我還是給你+1,因爲我最初忘了提及) – BiAiB