将克隆的子节点附加到克隆节点

Append cloned child node to cloned node

假设以下 XML:

<outer>
    <entity>
        <id>123</id>
        <subnode1>
        <subnode2>
    </entity>
    <entity>
        <id>124</id>
        <subnode1>
        <subnode2>
    </entity>
</outer>

总的来说,我想将实体节点拆分成单​​独的文件。我提取了实体节点并将它们存储在一个地图中,并将相应的文本值作为地图键。这对我来说绝对没问题。

现在我想将片段写入新的 XML 文件(ID 作为文件名)。我需要保留外部标签。因此,我调用以下方法获取外部节点:

private static Node cloneEmbeddingAncestors(final Node aItem) {
    Node parent = aItem.getParentNode();
    if (parent.equals(((Element) aItem).getOwnerDocument())) {
        // we've reached top level
        return aItem.cloneNode(false);
    }
    Node clone = cloneEmbeddingAncestors(parent);
    return clone.appendChild(aItem.cloneNode(false));
}

在调试该方法的最后一行时,我得到:

但是:整个表达式

还提供“[entity: null]”?!? (生成的 XML 片段也只显示一个 "entity" 标签。我希望文件中有一些 "outer" 标签,我的调试显示中有 "outer" 节点。)

现在,这是为什么呢?非常感谢任何帮助!谢谢!

我想我明白了。我的错误是在最后一个 return 语句中调用了 appendChild() 。 appendChild() return 是一个节点,但是是内部节点(子节点,而不是父节点)。当然,这种方法的想法是递归 return 外部(父)节点。因此,如果我将最后一行代码替换为:

Node clone = cloneEmbeddingAncestors(parent);
clone.appendChild(aItem.cloneNode(false));
return clone;

...一切都按设计进行。希望有一天能帮助到别人。