簡體   English   中英

Dom4j從一個xml分離/復制節點並添加到另一個

[英]Dom4j Detach/Copy node from one xml and add to another

我實際上遍歷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
    }
}

您需要在要移動的節點上調用detach() dom4j JavaDocs

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

由於Element如果需要將其轉換回Element ,則可以實現Node ,因此可以通過強制轉換來實現(前提是您知道分離的對象是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"))

而不是使用==

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM