如何使用Java将DOM节点从一个文档复制到另一个文档?

将节点从一个文档复制到另一个文档时遇到问题。我已经使用了Node中的acceptNode和importNode方法,但是它们不起作用。我也尝试了appendChild,但是抛出了异常。我正在使用Xerces。那里没有实现吗?还有另一种方法吗?

    List<Node> nodesToCopy = ...;

Document newDoc = ...;

for(Node n : nodesToCopy) {

// this doesn't work

newDoc.adoptChild(n);

// neither does this

//newDoc.importNode(n, true);

}

回答:

问题在于,节点的上下文包含许多内部状态,其中包括其父项和拥有它们的文档。无论是adoptChild()importNode()将目标文档,这就是为什么你的代码是没有的新节点的任何地方。

由于要复制节点而不要将其从一个文档移动到另一个文档,因此需要采取三个不同的步骤…

  1. 创建副本
  2. 将复制的节点导入到目标文档中
  3. 将副本放置在新文档中的正确位置

    for(Node n : nodesToCopy) {

// Create a duplicate node

Node newNode = n.cloneNode(true);

// Transfer ownership of the new node into the destination document

newDoc.adoptNode(newNode);

// Make the new node an actual item in the target document

newDoc.getDocumentElement().appendChild(newNode);

}

Java Document API允许您使用组合前两个操作importNode()

    for(Node n : nodesToCopy) {

// Create a duplicate node and transfer ownership of the

// new node into the destination document

Node newNode = newDoc.importNode(n, true);

// Make the new node an actual item in the target document

newDoc.getDocumentElement().appendChild(newNode);

}

true对参数cloneNode()importNode()指定是否需要深拷贝,这意味着复制节点和所有它的孩子。由于您有99%的时间想要复制整个子树,因此几乎总是希望这是事实。

以上是 如何使用Java将DOM节点从一个文档复制到另一个文档? 的全部内容, 来源链接: utcz.com/qa/403375.html

回到顶部