java - 如何将一个 XML 文档中的节点克隆添加到另一个 XML 文档中?

标签 java dom

我有以下代码:

private static Node GetText(String name)
{
    Node ret = textRoots.get(name);
    if (ret!=null)
    {
        ret=ret.cloneNode(true);
    }
    return ret;
}

在另一种方法中,我有以下几行:

Node textNode = GetText(name);
node.replaceChild(textNode, inner);

即使 Node 和文本来自的原始文档碰巧是不同的文档,我也希望它能够工作;我该怎么做?

最佳答案

这很大程度上取决于您想做什么!

如果您只想在其他文档中拥有该节点,您可以使用 importNode(...) 方法:

// someNode was created by another document
Node someNodeNew = doc2.importNode(someNode, true);

现在您只需在 doc2 中的某处添加 someNodeNew 即可。

这样做将创建旧节点的副本!

<小时/>

如果您想将节点(包括所有子子节点)移动到另一个文档,您有两种可能性:

  1. 使用文档adoptNode(...)方法:

如果有效,它将更改节点的所有者文档并将其从旧文档中删除。使用此方法只有一个问题:

Javadoc 指出:

Attempts to adopt a node from another document to this document. If supported, it changes the owner document [...]

所以这个方法不一定要支持,而且可能会失败!

  • 第二个(我认为更好)选项:
  • 导入节点,然后将其从旧树中删除:

    // someNode was created by another document
    Node someNodeNew = doc2.importNode(someNode, true);
    if (someNode.getParentNode() != null)
        someNode.getParentNode().removeChild(someNode);
    someNode = someNodeNew ;
    

    关于java - 如何将一个 XML 文档中的节点克隆添加到另一个 XML 文档中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34607012/

    相关文章:

    javascript - chrome 扩展 : get specific part of the current tab page in DOM object and display it in either popup. html 或新的 html 页面?

    javascript - EventListener 存储在哪里?

    javascript - 查找给定元素的规范有效属性

    javascript - 如何以编程方式设置 HTMLElement 的宽度?

    java - @Where 与 @SecondaryTable 不适用于 Hibernate

    java - 使用 Apache Ant 时部署的 jar 找不到主类

    javascript - $() 的第二个参数是什么意思?

    java - Google API for Plus Builder 失败

    java - JHipster - 将默认页面更改为某个实体页面

    java - 二维数组和 HashMap 之间的区别