欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

java使用dom4j获得innerXml,javadom4jinnerxml,在网页的 Documen

来源: javaer 分享于  点击 21942 次 点评:89

java使用dom4j获得innerXml,javadom4jinnerxml,在网页的 Documen


在网页的 Document 中如果想要获得某个结点的 innerHTML 就行,而在 Java 处理 XML 文档时想要获得某个节点的的 innerXML 就没那么简单的,标准的 org.w3c.Element 和 org.w3c.Node 均未提供类似 innerXML 的方法。

幸好,我们常用的 dom4j 里的 org.dom4j.Node 有一个方法是 String asXML(),不过它的意义相当于是 outerXML,也就是说它返回的内容还包括节点本身。

比如有这么在个 XML 文档:

<BookList>    description of book 1    <Book id="1">Unmi</Book></BookList>

上面文档,如果生成一个 org.dom4j.Node(节点是 BookList),那么它的 asXML() 结果就是上面内容本身,含前后的 <BookList> 和 </BookList>。要是想要得到真正的 innerXML 该如何做呢,很直接,把前后的节点 <BookList> 和 </BookList> 去了就是,于是有下面的完整实现代码:

package cc.unmi.utils;import org.dom4j.Node;public class XmlUtil{    public String getInnerXML(Node node){        String nodeName = node.getName(); //确定节点名        String outerXML = node.asXML(); //得到 outerXML        //注意起始节点可能会带属性        String innerXML = outerXML.replaceAll("^<"+nodeName+".*?>|</"+nodeName+">$", "");        return innerXML;    }}

有些地方介绍的是用递归循环子节点的办法进行字符串拼接的,还必须判断是否是文本节点。

其实我们还可以换一步来思考,既然 dom4j 提供了 asXML() 来得到 outerXML,它又是开源的,偷窥一下它的 outerXML 就能够实现一个自己更干净的 innerXML() 方法,也就是在 outerXML() 实现中直接忽略掉自身节点名。

转载自: http://unmi.cc/java-dom4j-get-innerxml

相关栏目:

用户点评