Java递归遍历XML所有元素2011-04-13做一个递归遍历XML的例子,为更为复杂的解析工作做基础。目标:遍历所有的元素节点,并且取出来其中的值,结果打印到控制台。源代码如下:本程序依赖DOM4j包。
import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.DocumentException;import org.dom4j.Element;import java.util.*;/*** Created by IntelliJ IDEA.<br>* <b>User</b>: leizhimin<br>* <b>Date</b>: 2008-4-14 14:02:12<br>* <b>Note</b>: Java递归遍历XML所有元素*/public class XmlTest {//private static Map<String, String> xmlmap = new HashMap<String, String>();//存储xml元素信息的容器private static List<Leaf> elemList = new ArrayList<Leaf>();//要测试的xml对象private static String srcXml = "<?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">
" +" <BS xmlns="10001"/>
" +"<note>西安市太白路2</note>
" +"</add>
" +" </adds>
" +"</person>
" +"<other>
" +"<name ID="HEHE">ASDF</name>
" +"</other>
" +"</doc>";public static void main(String args[]) throws DocumentException {XmlTest test = new XmlTest();Element root = test.getRootElement();test.getElementList(root);String x = test.getListString(elemList);System.out.println("-----------原xml内容------------");System.out.println(srcXml);System.out.println("-----------解析结果------------");System.out.println(x);}/** * 获取根元素 * * @return * @throws DocumentException */public Element getRootElement() throws DocumentException {Document srcdoc = DocumentHelper.parseText(srcXml);Element elem = srcdoc.getRootElement();return elem;}/** * 递归遍历方法 * * @param element */public void getElementList(Element element) {List elements = element.elements();if (elements.size() == 0) {//没有子元素String xpath = element.getPath();String value = element.getTextTrim();elemList.add(new Leaf(xpath, value));} else {//有子元素for (Iterator it = elements.iterator(); it.hasNext();) {Element elem = (Element) it.next();//递归遍历getElementList(elem);}}}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("
");}return sb.toString();}}/*** xml节点数据结构*/class Leaf {private String xpath; //private String value;public Leaf(String xpath, String value) {this.xpath = xpath;this.value = value;}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;}}