2011-04-01 7 views
0
기본적으로
public static void paintAllNodes(org.w3c.dom.Document domDocument) { 
     DOMReader reader = new DOMReader(); 
     org.dom4j.Document dom4jdoc = reader.read(domDocument); 

    } 

모든 요소를 ​​포장, 나는 모든 요소를 ​​선택 //* XPath를 사용하고 모든 단일 요소 주위에 <any> 요소 태그를 포장하고 싶습니다.DOM4J : <any> 태그

답변

0

이것은 당신이 요구 한대로 재귀를 피하기 위해 XPath 식 //*를 사용하여 내 코드는 다음과 같습니다

public static void main(String[] args) throws DocumentException { 
    SAXReader saxReader = new SAXReader(); 
    String xml = "<html><head><title>title</title></head><body><h1>title</h1></body></html>"; 
    Document document = saxReader.read(new StringReader(xml)); 

    List nodes = document.selectNodes("//*"); 
    for (Iterator<Node> iterator = nodes.iterator(); iterator.hasNext();) { 
     Node currentNode = iterator.next(); 
     DefaultElement newElement = new DefaultElement("any"); 
     Element parent = currentNode.getParent(); 
     if (parent != null) { 
      List contentList = parent.content(); 
      int index = contentList.indexOf(currentNode); 
      parent.remove(currentNode); 
      newElement.add(currentNode); 
      contentList.add(index, newElement); 
     } 
    } 

    Element rootElement = document.getRootElement(); 
    DefaultElement newRootElement = new DefaultElement("any"); 
    document.setRootElement(newRootElement); 
    newRootElement.add(rootElement); 
    System.out.println(document.asXML()); 
} 

이 내 출력 :이 도움이

<?xml version="1.0" encoding="UTF-8"?> 
<any><html><any><head><any><title>title</title></any></head></any><any><body><any><h1>title</h1></any></body></any></html></any> 

희망.