将克隆的子节点附加到克隆节点
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));
}
在调试该方法的最后一行时,我得到:
- 克隆:“[outer: null]”(看起来不错)
- aItem:“[entity: null]”(看起来也不错)
- aItem.cloneNode(false) : "[entity: null]"(看起来也不错)
但是:整个表达式
- clone.appendChild(aItem.cloneNode(假))
还提供“[entity: null]”?!? (生成的 XML 片段也只显示一个 "entity" 标签。我希望文件中有一些 "outer" 标签,我的调试显示中有 "outer" 节点。)
现在,这是为什么呢?非常感谢任何帮助!谢谢!
我想我明白了。我的错误是在最后一个 return 语句中调用了 appendChild() 。 appendChild() return 是一个节点,但是是内部节点(子节点,而不是父节点)。当然,这种方法的想法是递归 return 外部(父)节点。因此,如果我将最后一行代码替换为:
Node clone = cloneEmbeddingAncestors(parent);
clone.appendChild(aItem.cloneNode(false));
return clone;
...一切都按设计进行。希望有一天能帮助到别人。
假设以下 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));
}
在调试该方法的最后一行时,我得到:
- 克隆:“[outer: null]”(看起来不错)
- aItem:“[entity: null]”(看起来也不错)
- aItem.cloneNode(false) : "[entity: null]"(看起来也不错)
但是:整个表达式
- clone.appendChild(aItem.cloneNode(假))
还提供“[entity: null]”?!? (生成的 XML 片段也只显示一个 "entity" 标签。我希望文件中有一些 "outer" 标签,我的调试显示中有 "outer" 节点。)
现在,这是为什么呢?非常感谢任何帮助!谢谢!
我想我明白了。我的错误是在最后一个 return 语句中调用了 appendChild() 。 appendChild() return 是一个节点,但是是内部节点(子节点,而不是父节点)。当然,这种方法的想法是递归 return 外部(父)节点。因此,如果我将最后一行代码替换为:
Node clone = cloneEmbeddingAncestors(parent);
clone.appendChild(aItem.cloneNode(false));
return clone;
...一切都按设计进行。希望有一天能帮助到别人。