我有一个XML文件,如:
<description>
<text>blahblah</text>
<code>code</code>
<text>blah</text>
</description>
我已导航到节点description
,我想阅读完整内容,包括<text>
等。
我使用了getText()
,但它返回了空字符串
我使用了getStringValue()
,但它过滤了所有<text>
我使用了asXML()
,结果很接近,但结果中包含了我不想要的<description>
。
是否有方法来获取元素的XML内容?
答案 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)
假设document
是org.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();