2011-11-29 63 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();