java利用dom4j递归输出所有节点
2013-05-13 13:48
148 查看
test.xml文件
<?xml version="1.0" encoding="GBK"?> <doc> <person> <name>某人</name> <adds> <add ID="10002"> <BS>10002</BS> <note>南昌市</note> </add> <add ID=""> <BS>10002</BS> <note>空ID节点啊</note> </add> <add> <BS>10002</BS> <note>空ID节点啊</note> </add> <add ID="10001"> <note>深圳市</note> </add> </adds> </person> <other> <name ID="HEHE">其它节点</name> </other> </doc>
Leaf.java
package com.lushuifa.dom; public class Leaf { private String xpath;// private String value; private String domName; public String getDomName() { return domName; } public void setDomName(String domName) { this.domName = domName; } public Leaf(String xpath, String value,String domName) { this.xpath = xpath; this.value = value; this.domName = domName; } public String getXpath() { return xpath; } public void setXpath(String xpath) { this.xpath = xpath; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } }
DomUtil.java文件代码
package com.lushuifa.dom; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; public class DomUtil { public Document readXML() { Document document = null; SAXReader saxReader = new SAXReader(); try { document = saxReader.read("F:\\testSpace\\Dom4jTest\\src\\test.xml"); } catch (DocumentException e) { e.printStackTrace(); } return document; } /** * 获取根元素 * * @return * @throws DocumentException */ public Element getRootElement(){ try { Document srcdoc = this.readXML(); Element elem = srcdoc.getRootElement(); return elem; } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } /** * 递归遍历方法 * * @param element */ public List<Leaf> getElementList(Element element,ArrayList<Leaf> elemList) { List elements = element.elements(); if (elements.size() == 0) { //没有子元素 String xpath = element.getPath(); String value = element.getTextTrim(); String domName = element.getName(); elemList.add(new Leaf(xpath, value,domName)); } else { //有子元素 for (Iterator it = elements.iterator(); it.hasNext();) { Element elem = (Element) it.next(); //递归遍历 getElementList(elem,elemList); } } return elemList; } public String getListString(List<Leaf> elemList) { StringBuffer sb = new StringBuffer(); for (Iterator<Leaf> it = elemList.iterator(); it.hasNext();) { Leaf leaf = it.next(); sb.append(leaf.getXpath()).append(" = ").append(leaf.getValue()).append("\n"); } return sb.toString(); } public static void main(String[] args) { DomUtil domUtil = new DomUtil(); System.out.println("得到document对象是:"+domUtil.readXML());; Element rootElement = domUtil.getRootElement(); List<Leaf> list = domUtil.getElementList(rootElement,new ArrayList<Leaf>()); System.out.println("list=="+list); for (Leaf leaf : list) { System.out.println("节点路径:"+leaf.getXpath()); System.out.println("节点名称:"+leaf.getDomName()); System.out.println("节点值:"+leaf.getValue()); } } }
测试结果:
节点路径:/doc/person/name
节点名称:name
节点值:某人
节点路径:/doc/person/adds/add/BS
节点名称:BS
节点值:10002
节点路径:/doc/person/adds/add/note
节点名称:note
节点值:南昌市
节点路径:/doc/person/adds/add/BS
节点名称:BS
节点值:10002
节点路径:/doc/person/adds/add/note
节点名称:note
节点值:空ID节点啊
节点路径:/doc/person/adds/add/BS
节点名称:BS
节点值:10002
节点路径:/doc/person/adds/add/note
节点名称:note
节点值:空ID节点啊
节点路径:/doc/person/adds/add/note
节点名称:note
节点值:深圳市
节点路径:/doc/other/name
节点名称:name
节点值:其它节点
阅读更多相关文章推荐
- java利用dom4j递归输出所有节点
- Java利用文件输入输出流实现文件夹内所有文件拷贝到另一个文件夹
- java递归输出目录下的所有文件名
- Dom4j解析xml文件-递归遍历所有节点和属性
- Dom4j解析xml文件-递归遍历所有节点和属性
- SQL Server利用递归把所有【子部门员工】汇总到【一级根节点部门】
- dom4j使用递归的方法输出xml元素的所有值
- 使用递归删除树形结构的所有子节点(java和mysql实现)
- 递归删除树形结构的所有子节点(java和mysql实现)
- 存储过程利用递归查找出树节点以及所有子节点
- Java中利用递归实现斐波纳斯数列的兔子问题,动态输出兔子的总数
- Dom4j解析xml文件-递归遍历所有节点和属性
- Java中如何利用File类递归的遍历指定目录中的所有文件和文件夹
- java:递归实现输出目录下所有的文件(列出目录下所有的文件)
- java递归根据节点ID得到所有父节点名称
- Dom4j解析xml文件-递归遍历所有节点和属性
- IO流_递归输出指定目录下所有的java文件的绝对路径案例
- 利用递归方法输出1~10所有整数的阶乘
- Java利用递归思想遍历指定目录,获取所有的文件
- 第十二周 项目4 利用遍历思想求解图问题(输出通过一个节点的所有简单回路 )