gpt4 book ai didi

java - Dom4j 从一个 xml 中分离/复制节点并添加到另一个

转载 作者:行者123 更新时间:2023-11-29 05:39:15 27 4
gpt4 key购买 nike

我实际上是在遍历src xml并将其转换为另一个destination xml。但是 src xml 的一部分将被复制并添加到 destination。但是当我尝试这样做时,我得到了以下 Exception:

could not be added to the element "<DestinationParent>" because: The Node already has an existing parent of "<SourceParent"

我正在遍历 src XML 并调用这个函数
代码

private static Element treeWalk (Element rootElement, Element parentElement)
{
Element moduleRootElement = doc.addElement("Request");
if(rootElement.getName()=="someName")
{
moduleRootElement.add(childElement.getName());
} else {
moduleRootElement.add(rootElement); //If root's parent is not null I get a exception here.
//moduleRootElement= rootElement.createCopy(); //Didn't work
}
}

最佳答案

您需要在要移动的节点上调用detach()。来自dom4j JavaDocs

Node node = ...; 
Element someOtherElement = ...;
someOtherElement.add( node.detach() );

因为 Element 实现了 Node 如果你需要转换回 Element 你可以通过转换来完成(前提是你知道这件事你分离的是一个 Element)。您的另一个选择可能是复制 Element。使用您的代码作为起点:

Element moduleRootElement = doc.addElement("Request");
if (rootElement.getName().equals("someName") {
moduleRootElement.add(childElement.getName());
} else {
moduleRootElement.add(rootElement.createCopy());
}

看起来您确实尝试过此操作,但并没有完全实现。请记住,在 java 中使用 = 将变量重新分配给新对象。所有现有的对它的引用都被破坏了。

作为旁注,您可能还需要使用

检查根元素的名称
if(rootElement.getName().equals("someName"))

而不是使用==

关于java - Dom4j 从一个 xml 中分离/复制节点并添加到另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18277846/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com