Dom4j递归解析XML实现JS的getElementsByName类似方法

用惯了JS解析XML要在Java里面解析实在觉得麻烦,又有种多解析器,W3C,JDOM,DOM4J, SAX眼花缭乱,在网上搜到推荐用Dom4j于是就用了它。

但是发现Dom4J解析只能一层一层的按节点读甚是不爽,远没有JS的getElementsByName方法,一取一个数组这么简便,于是就自己写了一个。

先学习了一下Dom4j的使用方法,可以看这个网址,当然还可以去官网,不过我郁闷了半天没找到文档,用Eclipse的代码提示功能找了一下

http://heavyz.sourceforge.net/homepage/homepage_zh/comp/notes/dom4j.html

例子的XML文件如下:

 

xml version="1.0" encoding="UTF-8"?>
<callcenter_response>
<action_id>PRODUCT_INFOaction_id>
<error>0error>
<err_code/>
<err_desc/>
<count>1count>
<total_page>1total_page>
<page_no>1page_no>
<record>
<service_code>1111service_code>
<service_name>2222service_name>
record>
<record>
<service_code>1111service_code>
<service_name>2222service_name>
record>
callcenter_response>

 

只是举个简单的例子说明我编的程序的适用性,下面是代码了:

 

package  com;

import  java.lang.reflect. * ;
import  java.util.ArrayList;
import  java.util.Iterator;


import  org.dom4j.Document;
import  org.dom4j.DocumentException;

import  org.dom4j.Element;

import  org.dom4j.io.SAXReader;

public   class  ReadConfig  ... {
public static void main(String[] args) ...{

        SAXReader xmlReader 
= new SAXReader();

        
try ...{
            Document doc 
= xmlReader.read("test.xml");
            
            Element root 
= doc.getRootElement();
            
            ReadConfig rc 
=new ReadConfig ();
            ArrayList ssa
=new ArrayList();
            ArrayList list
=rc.getElementsByName (ssa, root, "record");

             System.out.println( list.size());
        }
 catch (DocumentException e) ...{
            
            e.printStackTrace();
        }

    }

    
public ArrayList getElementsByName(ArrayList elementName,Element top,String name)
    
...{
        
        
if(top.getName().equalsIgnoreCase(name))
        
...{
          elementName.add(top);
        }

        Iterator iter 
= top.elementIterator();
        
        
if (!iter.hasNext())...{return elementName;}
        
else
        
...{
             
while(iter.hasNext()) 
              
...
                  Element sub 
= (Element)iter.next();
                  
                  getElementsByName(elementName,sub,name); 
             
              }

            
        }

        
return elementName;
        
        
    }


}

 

这里不多解释,这个程序调试过,可以直接用,有兴趣我们讨论一下的就跟贴吧



 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值