2011-04-01 45 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> 

希望這有助於。