浏览 4104 次
|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2006-12-14 关键字: dom4j getelementsbyname 递归 解析xml
用惯了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_INFO</action_id> <error>0</error> <err_code/> <err_desc/> <count>1</count> <total_page>1</total_page> <page_no>1</page_no> <record> <service_code>1111</service_code> <service_name>2222</service_name> </record> <record> <service_code>1111</service_code> <service_name>2222</service_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;
}
}
这里不多解释,这个程序调试过,可以直接用,有兴趣我们讨论一下的就跟贴吧 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间:2006-12-14
楼主可以试试xpath,很方便
selectNodes && selectSingleNode |
|
| 返回顶楼 | |
|
最后更新时间:2006-12-14
对呀 dom4j对xpath的支持很好
没必要自己写递归便利的 |
|
| 返回顶楼 | |
|
最后更新时间:2006-12-15
多看看dom4j的API,搂主就不用再重复造轮子了
|
|
| 返回顶楼 | |
|
最后更新时间:2006-12-17
xpath 试了半天不出来,而且XPAth要求使用者知道节点的位置,没法叫一个项目组的人都很快地上手。
|
|
| 返回顶楼 | |
|
最后更新时间:2006-12-18
dom4j的Element.elementIterator(tagName) 即可直接获得名字为tagName的elementlist的iterator.何必呢。
|
|
| 返回顶楼 | |
|
最后更新时间:2006-12-20
l0979365428 写道 xpath 试了半天不出来,而且XPAth要求使用者知道节点的位置,没法叫一个项目组的人都很快地上手。
看来你是xpath初学者啊 呵呵 看看 xpath的 "descendant::" 关键字 还有 "//" 的用法 |
|
| 返回顶楼 | |
|
最后更新时间:2006-12-20
看看这个http://www.zvon.org/xxl/XPathTutorial/General/examples.html
有具体例子的 |
|
| 返回顶楼 | |
|
最后更新时间:2007-01-24
今天到网上逛了一下,多谢各位指教,就是不知道xpath性能咋样啊,我正在看那个文档了,要是方便准备升级一下
|
|
| 返回顶楼 | |











