Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.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
使用JavaDOM解析器将XML节点从一个文档复制到另一个文档_Java_Dom_Xml Parsing - Fatal编程技术网

使用JavaDOM解析器将XML节点从一个文档复制到另一个文档

使用JavaDOM解析器将XML节点从一个文档复制到另一个文档,java,dom,xml-parsing,Java,Dom,Xml Parsing,我一直在实现一个简单的算法,该算法解析XML文件并根据节点中的属性值调用其节点。我检索所有节点并将整个节点插入到已排序的ArrayList中。然后,我创建了一个新的XML文档,并创建了新的and标记,但当我尝试复制已排序的节点并将其附加到时,一个异常声明另一个文档中仍在使用它。我正在使用 Node sortedCnode= cNode.cloneNode(false); //tried true as well b.appendChild(sortedCnode); 我认为我的代码试图附加整个

我一直在实现一个简单的算法,该算法解析XML文件并根据节点中的属性值调用其节点。我检索所有节点并将整个节点插入到已排序的ArrayList中。然后,我创建了一个新的XML文档,并创建了新的and标记,但当我尝试复制已排序的节点并将其附加到时,一个异常声明另一个文档中仍在使用它。我正在使用

Node sortedCnode= cNode.cloneNode(false); //tried true as well
b.appendChild(sortedCnode);
我认为我的代码试图附加整个true。但是,我不知道该怎么做

XML如下所示

<A>
  <B>
    <C>
      <D>
      </D>
      <E>
      </E>
    </C>
  </B>
</A>

我想出来了

要将节点从源DOM复制到目标DOM,应使用下面的方法

targetBNode.appendChild(targetDOC.adoptNode(sourceCnode.cloneNode(true)));

Jherico在此提供了更完整的答案:

总而言之,您需要:

  • 复制节点
  • 将副本导入目标文档
  • 将副本放置在新文档中
  • Jherico提供了两种方法,一种使用cloneNode()和adoptNode(),这两种方法与接受的答案相同。但是,通过对文档使用importNode()存在一个快捷方式方法,它可以为您执行这两个操作

    targetBNode.appendChild(targetDOC.importNode(sourceCnode, true));
    

    您能给出一个带有属性值的示例xml,您喜欢根据它进行排序吗?我认为这里最好的方法是使用xslt转换,而不是读取和重新创建xml。