如何在java中使用Dom4j获取XML的节点内容

时间:2011-11-29 11:23:03

标签: java xml dom4j

我有一个XML文件,如:

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

我已导航到节点description,我想阅读完整内容,包括<text>等。

我使用了getText(),但它返回了空字符串 我使用了getStringValue(),但它过滤了所有<text> 我使用了asXML(),结果很接近,但结果中包含了我不想要的<description>

是否有方法来获取元素的XML内容?

4 个答案:

答案 0 :(得分: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();
}

请注意,如果元素本身有文本内容,则不会返回文本内容,只返回子节点。

答案 1 :(得分:3)

假设documentorg.dom4j.Document的实例,那么

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

答案 2 :(得分:0)

答案 3 :(得分: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();