复制的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
节点!