Blog信息 |
blog名称:小鸟吹烟 日志总数:157 评论数量:424 留言数量:-1 访问次数:1250156 建立时间:2006年10月23日 |

| |
[XML]Dom4j递归解析XML实现JS的getElementsByName类似方法 文章收藏, 网上资源
tone 发表于 2007/2/28 11:58:41 |
http://www.show6.net/browse-37915.html
用惯了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文件如下:
500)this.width=500'>xml version="1.0" encoding="UTF-8"?>500)this.width=500'><callcenter_response>500)this.width=500'><action_id>PRODUCT_INFOaction_id>500)this.width=500'><error>0error>500)this.width=500'><err_code/>500)this.width=500'><err_desc/>500)this.width=500'><count>1count>500)this.width=500'><total_page>1total_page>500)this.width=500'><page_no>1page_no>500)this.width=500'><record>500)this.width=500'><service_code>1111service_code>500)this.width=500'><service_name>2222service_name>500)this.width=500'>record>500)this.width=500'><record>500)this.width=500'><service_code>1111service_code>500)this.width=500'><service_name>2222service_name>500)this.width=500'>record>500)this.width=500'>callcenter_response>
只是举个简单的例子说明我编的程序的适用性,下面是代码了:
500)this.width=500'>package com;500)this.width=500'>500)this.width=500'>import java.lang.reflect.*;500)this.width=500'>import java.util.ArrayList;500)this.width=500'>import java.util.Iterator;500)this.width=500'>500)this.width=500'>500)this.width=500'>import org.dom4j.Document;500)this.width=500'>import org.dom4j.DocumentException;500)this.width=500'>500)this.width=500'>import org.dom4j.Element;500)this.width=500'>500)this.width=500'>import org.dom4j.io.SAXReader;500)this.width=500'>500)this.width=500'>500)this.width=500'>public class ReadConfig ...{500)this.width=500'>500)this.width=500'>public static void main(String[] args) ...{500)this.width=500'>500)this.width=500'> SAXReader xmlReader = new SAXReader();500)this.width=500'>500)this.width=500'>500)this.width=500'> try ...{500)this.width=500'> Document doc = xmlReader.read("test.xml");500)this.width=500'> 500)this.width=500'> Element root = doc.getRootElement();500)this.width=500'> 500)this.width=500'> ReadConfig rc =new ReadConfig ();500)this.width=500'> ArrayList ssa=new ArrayList();500)this.width=500'> ArrayList list=rc.getElementsByName (ssa, root, "record");500)this.width=500'>500)this.width=500'> System.out.println( list.size());500)this.width=500'>500)this.width=500'> } catch (DocumentException e) ...{500)this.width=500'> 500)this.width=500'> e.printStackTrace();500)this.width=500'> }500)this.width=500'> }500)this.width=500'> public ArrayList getElementsByName(ArrayList elementName,Element top,String name)500)this.width=500'>500)this.width=500'> ...{500)this.width=500'> 500)this.width=500'> if(top.getName().equalsIgnoreCase(name))500)this.width=500'>500)this.width=500'> ...{500)this.width=500'> elementName.add(top);500)this.width=500'> }500)this.width=500'> Iterator iter = top.elementIterator();500)this.width=500'> 500)this.width=500'>500)this.width=500'> if (!iter.hasNext())...{return elementName;}500)this.width=500'> else500)this.width=500'>500)this.width=500'> ...{500)this.width=500'> while(iter.hasNext()) 500)this.width=500'>500)this.width=500'> ...{ 500)this.width=500'> Element sub = (Element)iter.next();500)this.width=500'> 500)this.width=500'> getElementsByName(elementName,sub,name); 500)this.width=500'> 500)this.width=500'> }500)this.width=500'> 500)this.width=500'> }500)this.width=500'> return elementName;500)this.width=500'> 500)this.width=500'> 500)this.width=500'> }500)this.width=500'>500)this.width=500'>}
这里不多解释,这个程序调试过,可以直接用,有兴趣我们讨论一下的就跟贴吧 |
|
|