Dom4j递归解析XML实现JS的getElementsByName类似方法
2006-12-14 17:54
751 查看
用惯了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;
}
}
这里不多解释,这个程序调试过,可以直接用,有兴趣我们讨论一下的就跟贴吧
但是发现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;
}
}
这里不多解释,这个程序调试过,可以直接用,有兴趣我们讨论一下的就跟贴吧
相关文章推荐
- Dom4j递归解析XML实现JS的getElementsByName类似方法
- 原生JS实现元素的getElementsByClassName()方法,适用于多个类名
- js 如何获取class的元素 以及创建方法getElementsByClassName
- 【整理】JS中getElementsByName()方法
- etElementByID getElementsByName getElementsByTagName的区别和总结 +js+Mxl+xmlhttp
- 兼容ie5-ie11及其他主流浏览器的js document.getElementsByClassName 方法
- 原生js方法document.getElementsByClassName在ie8及其以下的兼容性问题
- js 教你怎么封装 例如如何封装getElementsByClassName()方法
- js中通过getElementsByName访问name集合对象的方法
- Div使用name属性实现通过getElementsByName获取Div集的方法
- js 获取class的元素的方法 以及创建方法getElementsByClassName
- js原生封装getClassName()方法-ie不支持getElementsByClassName,所以要自己实现获取类名为className的所有元素
- getElementByID getElementsByName getElementsByTagName的区别和总结 +js+Mxl+xmlhttp
- js 获取class的元素的方法 以及创建方法getElementsByClassName
- etElementByID getElementsByName getElementsByTagName的区别和总结 +js+Mxl+xmlhttp
- 【分享】【js中的document.getElementsByName()方法的使用】
- etElementByID getElementsByName getElementsByTagName的区别和总结 +js+Mxl+xmlhttp
- etElementByID getElementsByName getElementsByTagName的区别和总结 +js+Mxl+xmlhttp
- 封装getElementsByClassName方法,实现兼容旧浏览器
- 原生js document.getElementsByClassName在IE8及以下浏览器的兼容