Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java使用replace复制xml节点和子节点_Java_Xml_Templates_Dom_W3c - Fatal编程技术网

Java使用replace复制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<

我有一个XML模板,其节点如下(简化):


我可以获取迭代器(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);
    }
  }
}