Java使用replace复制xml节点和子节点
我有一个XML模板,其节点如下(简化):Java使用replace复制xml节点和子节点,java,xml,templates,dom,w3c,Java,Xml,Templates,Dom,W3c,我有一个XML模板,其节点如下(简化): 我可以获取迭代器(ArrayList)并获取对象的值。我只是不知道如何使用整个节点作为模板(除了包装器),保持它的子节点(以及它们的子节点递归)完好无损。我需要将节点替换为ArrayList中对象的值,并为每个项重新重复 所需输出示例: <items> <item> <description>item 1</description> <total>1.23<
我可以获取迭代器(ArrayList)并获取对象的值。我只是不知道如何使用整个节点作为模板(除了
包装器),保持它的子节点(以及它们的子节点递归)完好无损。我需要将
节点替换为ArrayList中对象的值,并为每个项重新重复
所需输出示例:
<items>
<item>
<description>item 1</description>
<total>1.23</description>
</item>
<item>
<description>item 2</description>
<total>3.21</description>
</item>
</items>
项目1
1.23
项目2
3.21
我一直在尝试的是:有什么帮助吗
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);
}
}
}
import javax.xml.parsers.*;
导入javax.xml.transform.*;
导入org.w3c.dom.*;
nodelisteaches=itemsElement.getelementsbytagnames(“sl”,“each”);
对于(int i=0;i在调用Node Node=origNode.cloneNode(true);
您应该在eaches
父节点上调用insertAfter
。
不要忘记在迭代后删除每个节点
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);
}
}
}