用惯了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 >
< 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;
}
}
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;
}
}
这里不多解释,这个程序调试过,可以直接用,有兴趣我们讨论一下的就跟贴吧