`
mgoann
  • 浏览: 253547 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Dom4j 统计子节点个数

阅读更多

Dom4j 统计子节点个数

前言

 

最近在使用dom4jXML进行解析的过程中,遇到一些问题,笔者在这里和大家一起分享一下。

 

首先,说下需要的具体要求,要求用dom4jXML进行解析,统计每个节点的所有子孙节点的个数,并添加到当前节点的count属性中。看似问题很简单,原本以为dom4j会直接提供这样的接口供我们使用,然后调用addAttribute就搞定了。把dom4j文档翻了个稀巴烂也没找个这样的接口,这时对dom4j稍稍有点失望了,连这样的接口都没有提供。看的时候倒是发现dom4j提供了这样一个接口NodeCount (),真是喜出望外,二话不说拿来就用,结果又是失望而归,该接口只能统计当前节点的第一级子节点的数量。也就是不对其孙子辈儿的节点负责任,dom4j也太不负责任了吧。

 

开始遍历

 

不过有了NodeCount(),想来完成任务也不是什么难事。首先,当前节点的子节点个数不就是等于它的子节点的子节点的。。。。。。的个数总和吗,想来肯定是要递归了。所有先写了个递归遍历所有节点的算法。

 

public void getNodeCount(Element element) {
for(int i = 0;  i < element.nodeCount();  i++) {
Node node = element.node(i);
if(node instanceof Element) {
       Element elementTemp = (Element) Node;
       getNodeCount(elementTemp);
}
}
}

 

 

 

下面就是工作的重点了,现在可以对每个element进行遍历了,那么开始统计子节点的个数。

 

开始统计

public int getNodeCount(Element element) {
    int nodeCount = 0;
for(int i = 0;  i < element.nodeCount();  i++) {
Node node = element.node(i);
if(node instanceof Element) {
    int nodeCountI = 0;
    Element elementTemp = (Element) Node;
if(elementTemp.nodeCount <= 0) nodeCountI = 0;
       nodeCount = nodeCountI + getNodeCount(elementTemp);       
}
}
nodeCount = nodeCountI + element.nodeCount();
Element.addAttribute(“count”, nodeCount + “”);
Return nodeCount;
}

 

至此用dom4j统计节点的所有子节点个数就完成了。

4
1
分享到:
评论

相关推荐

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    全书一共被压缩为5个rar,这是第四个!!!! 其他的请看ID:ljtt123(本人分享) 本博客提供的所有教程的资源原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播。同时,转载时不要移除本申明。如产生任何...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    3.5.1 下载并配置dom4j 88 3.5.2 dom4j api介绍 88 3.5.3 第一个实例 92 3.5.4 第二个实例 94 3.6 解析名称空间 96 3.6.1 dom和名称空间 96 3.6.2 sax和名称空间 97 3.6.3 jdom和名称空间 98 3.6.4 dom4j和...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    3.5.1 下载并配置dom4j 88 3.5.2 dom4j api介绍 88 3.5.3 第一个实例 92 3.5.4 第二个实例 94 3.6 解析名称空间 96 3.6.1 dom和名称空间 96 3.6.2 sax和名称空间 97 3.6.3 jdom和名称空间 98 3.6.4 dom4j和...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    3.5.1 下载并配置dom4j 88 3.5.2 dom4j api介绍 88 3.5.3 第一个实例 92 3.5.4 第二个实例 94 3.6 解析名称空间 96 3.6.1 dom和名称空间 96 3.6.2 sax和名称空间 97 3.6.3 jdom和名称空间 98 3.6.4 dom4j和...

    Bayesian Reasoning and Machine Learning.

    14. **节点的子节点**(`ch(x)`):表示节点x的所有子节点。 15. **节点的邻居**(`ne(x)`):表示节点x的所有邻居节点。 16. **变量的状态数**(`dim(x)`):对于离散变量,表示该变量可能的状态数量。 17. **期望...

    Bayesian Reasoning and Machine Learning

    15. **`ch(x)`** - 表示节点x的子节点集合。子节点是受x直接影响的节点。 16. **`ne(x)`** - 表示节点x的邻居节点集合。在图模型中,邻居节点通常是指通过边直接连接的节点。 17. **`dim(x)`** - 对于离散变量x,...

    Python Cookbook

    12.6 从XML DOM节点的子树中删除仅有空白符的文本节点 451 12.7 解析Microsoft Excel的XML 452 12.8 验证XML文档 454 12.9 过滤属于指定命名空间的元素和属性 455 12.10 用SAX合并连续的文本事件 458 12.11 ...

    Java学习笔记-个人整理的

    {14.4}dom4j}{207}{section.14.4} {14.5}XPath}{210}{section.14.5} {14.6}apache.commons}{211}{section.14.6} {15}sqlite3}{213}{chapter.15} {16}Web基础}{215}{chapter.16} {16.1}...

Global site tag (gtag.js) - Google Analytics