2013-08-16 10 views
1

Я на самом деле перемещаю src xml и преобразовываю его в другой destination xml. Но часть src xml будет просто скопирована и добавлена ​​в destination. Но когда я пытаюсь сделать это я получаю следующее Exception:Dom4j Отсоединить/скопировать узел из одного xml и добавить в другой

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 
    } 
} 
+1

Можете ли вы предоставить более подробную информацию. Как пример кода, ввод и вывод? – vinay

ответ

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")) 

вместо использования ==

+0

Как преобразовать узел в элемент? Если не как создать новый 'someOtherElement'? –

+0

Я отредактирую ответ. –

+0

'Элемент' реализует' Node' –