假定以下XML:
<outer>
<entity>
<id>123</id>
<subnode1>
<subnode2>
</entity>
<entity>
<id>124</id>
<subnode1>
<subnode2>
</entity>
</outer>
总的来说,我想将实体节点拆分为单独的文件。我已经提取了实体节点并将它们存储在Map中,其中相应的文本值作为map键。这对我来说绝对没问题。
现在我想将片段写入新的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片段也只显示“实体”标签。我希望在调试显示中的文件resp。“outer”节点中有一些“外部”标签。)
现在,为什么?任何帮助都非常适合!谢谢!
答案 0 :(得分:0)
我想我已经明白了。我的错误是在最后一个return语句中调用appendChild()。 appendChild()返回一个Node,但是返回一个Node(子节点,而不是父节点)。当然,这种方法的想法是以递归方式返回外部(父)节点。因此,如果我将最后一个代码行替换为:
Node clone = cloneEmbeddingAncestors(parent);
clone.appendChild(aItem.cloneNode(false));
return clone;
......一切都按设计工作。希望有一天能帮助别人。