我实际上遍历src
xml并将其转换为另一个destination
xml。但src
xml的一部分将被复制并添加到destination
。但是当我尝试这样做时,我会跟踪例外:
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
}
}
答案 0 :(得分:2)
您需要在要移动的节点上调用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"))
而不是使用==