2011-11-29 64 views
1

我有這樣一個XML文件:如何獲取XML節點的內容與dom4j的在Java中

<description> 
    <text>blahblah</text> 
    <code>code</code> 
    <text>blah</text> 
</description> 

我已經瀏覽到的節點description,我想讀的全部內容,包括<text>等上。我使用了getText(),但它返回了空字符串。
我已使用getStringValue(),但它過濾了所有<text>
我使用了asXML(),結果很接近,但結果包含<description>,我不想要。

有沒有一種方法來獲取元素的XML內容?

回答

3

事情是這樣的:

public static void main(String[] args) throws DocumentException { 
    String xml = "<description><text>blahblah</text><code>code</code><text>blah</text></description>"; 
    SAXReader reader = new SAXReader(); 
    Document doc = reader.read(new StringReader(xml)); 
    Element description = doc.getRootElement(); 
    String content = getContent(description); 
    System.out.println(content); 
} 

private static String getContent(Element element) { 
    StringBuilder builder = new StringBuilder(); 
    for (Iterator<Element> i = element.elementIterator(); i.hasNext();) { 
    Element e = i.next(); 
    builder.append(e.asXML()); 
    } 
    return builder.toString(); 
} 

注意,如果元素具有文本內容本身,這將不會返回文本內容,只有子節點。

2

假設document是和org.dom4j.Document實例,然後

String xPath = "description"; 
List<Node> nodes = document.selectNodes(xPath); 
for (Node node : nodes) { 
node.asXML() 
} 
0

只是想通過qwerky添加到接受的答案:

也能夠解析純文本元素的內容(即它不包含嵌套的XML):

public static String getContent(Element element) { 
    if (element.isTextOnly()) 
     return element.getText(); 
    StringBuilder sb = new StringBuilder(); 
    Element currElement = null; 
    for (Iterator<Element> iterator = element.elementIterator() ; iterator.hasNext() ; /* Continue till done */) { 
     currElement = iterator.next(); 
     sb.append(currElement.asXML()); 
    } 
    return sb.toString(); 
} 

所以我添加的方法開始執行以下操作:

if (element.isTextOnly()) 
    return element.getText();