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

如何在java中使用Dom4j获取XML的节点内容,java,xml,dom4j,Java,Xml,Dom4j,我有一个XML文件,如: <description> <text>blahblah</text> <code>code</code> <text>blah</text> </description> 我已经导航到节点description,我想阅读完整的内容,包括等等 我使用了getText(),但它返回了空字符串。 我使用了getStringValue(),但它过滤了所有 我使用了as

我有一个XML文件,如:

<description>
  <text>blahblah</text>
  <code>code</code>
  <text>blah</text>
</description>
我已经导航到节点
description
,我想阅读完整的内容,包括
等等

我使用了
getText()
,但它返回了空字符串。
我使用了
getStringValue()
,但它过滤了所有

我使用了
asXML()
,结果很接近,但结果包含我不想要的


是否有一种方法可以获取元素的XML内容?

您应该了解如何使用XPath:

您应该了解如何使用XPath:

类似于以下内容:

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();
}
请注意,如果元素本身有文本内容,则不会返回文本内容,只返回子节点。

类似以下内容:

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();
}

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

假设
document
org.dom4j.document
的实例,然后

String xPath = "description";
List<Node> nodes = document.selectNodes( xPath );
for (Node node : nodes) {
 node.asXML()
}
stringxpath=“description”;
列表节点=document.selectNodes(xPath);
用于(节点:节点){
node.asXML()
}

假设
文档是
org.dom4j.document
的实例,然后

String xPath = "description";
List<Node> nodes = document.selectNodes( xPath );
for (Node node : nodes) {
 node.asXML()
}
stringxpath=“description”;
列表节点=document.selectNodes(xPath);
用于(节点:节点){
node.asXML()
}

只想在qwerky接受的答案中添加以下内容:

还要能够解析纯文本元素的内容(即它不包含嵌套的xml):


我只想补充一下qwerky接受的答案:

还要能够解析纯文本元素的内容(即它不包含嵌套的xml):