复制的Java XML节点和子节点替换为

问题描述:

我有喜欢(简体)节点的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); 
    } 
    } 
} 

调用Node node = origNode.cloneNode(true);后,你应该eaches父节点上调用insertAfter。 不要忘记在迭代后删除eaches节点!