[英]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.