1

我有一个 XML 文件,例如:

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

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

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

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

4

4 回答 4

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

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

于 2011-11-29T11:52:04.717 回答
3

假设document是 和 的实例org.dom4j.Document,则

String xPath = "description";
List<Node> nodes = document.selectNodes( xPath );
for (Node node : nodes) {
 node.asXML()
}
于 2011-11-29T11:59:14.460 回答
0

你应该看看使用 XPath:http ://www.ibm.com/developerworks/library/x-javaxpathapi/index.html

于 2011-11-29T11:24:37.003 回答
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();
于 2014-04-01T23:04:05.033 回答