2015-05-20 7 views
1
различный

следующий код:Использование XPaths на клонированной DOM4J Object производит результаты

Document document = DocumentHelper.createDocument(); 
    Element e1 = document.addElement("Element1") 
      .addElement("Element2") 
      .addAttribute("id", "1"); 
    System.out.println((Element)e1.selectSingleNode("//*[@id=\"1\"]")); 
    Element e2 = e1.createCopy(); 
    System.out.println((Element)e2.selectSingleNode("//*[@id=\"1\"]")); 

производит этот выход:

[email protected] [Element: <Element2 attributes: [[email protected] [Attribute: name id value "1"]]/>] 
null 

Если я использую:

System.out.println(e1.asXML().equals(e2.asXML())); 

он возвращает истину. Почему это происходит? Я использую неправильный способ клонирования элит? Я genuinly путать здесь ...

ответ

1

Поскольку копия не прилагается к Document см createCopy() метод комментарий

/** 
* <p> 
* Creates a deep copy of this element The new element is detached from its 
* parent, and getParent() on the clone will return null. 
* </p> 
* 
* @return a new deep copy Element 
*/ 
Element createCopy(); 


Element e2 = e1.createCopy(); 
System.out.println(e2.getDocument()); // NULL 

DOM4J необходим элемент документа для разрешения имен и их префиксы среди других вещей. Если вы добавите e2 в документ, он вернет результат.

DocumentHelper.createDocument().add(e2); 
System.out.println((Element)e2.selectSingleNode("//*[@id=\"1\"]")); 
+0

Спасибо, это решило мою проблему :-) –