2011-03-09 267 views
1

我有喜歡(簡體)節點的XML模板:複製的Java XML節點和子節點替換爲

<items> 
<sl:each value="iter" ignoreonzero="total"> 
    <item> 
    <description><sl:prop value="desc" /></description> 
    <total><sl:prop value="total" /></description> 
    </item> 
</sl:each> 
</items> 

我可以得到迭代器(一個ArrayList),並獲取對象的值。我只是無法弄清楚如何使用這個整個節點作爲模板(<sl:each>包裝除外),保持它的孩子(和他們的孩子遞歸)完好無損。我需要用來自ArrayList中的對象的值替換<sl:prop />節點,併爲每個項目重新進行復制。

樣品所需的輸出:

<items> 
    <item>  
    <description>item 1</description> 
    <total>1.23</description> 
    </item> 
    <item>  
    <description>item 2</description> 
    <total>3.21</description> 
    </item> 
</items> 


我一直想:任何幫助嗎?

import javax.xml.parsers.*; 
import javax.xml.transform.*; 
import org.w3c.dom.*; 


NodeList eaches = itemsElement.getElementsByTagNameNS("sl","each"); 
for (int i=0;i<eaches.getLength();i++) 
{ 
    Node origNode = eaches.item(i); 
    /* 
    Code to get ArrayList and object 
    */ 
    for (Object o : iter) { 
    Node node = origNode.cloneNode(true); 
    NodeList props = ((Element) node).getElementsByTagNameNS("sl","prop"); 
    for (int j=0;j<props.getLength();j++) { 
     Node prop = props.item(j); 
     String textContent = ""; 
     /* 
     Code to get text content 
     */ 
     Node parent = prop.getParentNode(); 
     Node text = doc.createTextNode(textContent); 
     parent.replaceChild(prop,text); 
    } 
    } 
} 

回答

0

調用Node node = origNode.cloneNode(true);後,你應該eaches父節點上調用insertAfter。 不要忘記在迭代後刪除eaches節點!