3

我实际上是在遍历srcxml 并将其转换为另一个destinationxml。但是部分srcxml 将被复制并添加到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
    }
}
4

1 回答 1

4

您需要调用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 中 using=将变量重新分配给新对象。对它的所有现有引用都被破坏了。

作为旁注,您可能还需要检查根元素的名称

if(rootElement.getName().equals("someName"))

而不是使用==

于 2013-08-16T17:36:07.033 回答