Java递归遍历XML所有元素。

Java递归遍历XML所有元素

    做一个递归遍历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/"?>/n" +



            "<doc>/n" +



            "    <person>/n" +



            "        <name>某人</name>/n" +



            "        <adds>            /n" +



            "            <add ID=/"10002/">/n" +



            "                <BS>10002</BS>/n" +



            "                <note>西安市太白路</note>/n" +



            "            </add>/n" +



            "            <add ID=/"/">/n" +



            "                <BS>10002</BS>/n" +



            "                <note>空ID节点啊</note>/n" +



            "            </add>/n" +



            "            <add>/n" +



            "                <BS>10002</BS>/n" +



            "                <note>空ID节点啊</note>/n" +



            "            </add>/n" +



            "/t/t/t<add ID=/"10001/">/n" +



            "/t/t/t/t<BS xmlns=/"10001/"/>/n" +



            "                <note>西安市太白路2</note>/n" +



            "            </add>/n" +



            "/t/t</adds>/n" +



            "    </person>/n" +



            "    <other>/n" +



            "        <name ID=/"HEHE/">ASDF</name>/n" +



            "    </other>/n" +



            "</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("/n");



        }



        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;



    }



}



    运行结果: -----------原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">



    <BS xmlns="10001"/>



                <note>西安市太白路2</note>



            </add>



  </adds>



    </person>



    <other>



        <name ID="HEHE">ASDF</name>



    </other>



</doc>



-----------解析结果------------



/doc/person/name = 某人



/doc/person/adds/add/BS = 10002



/doc/person/adds/add/note = 西安市太白路



/doc/person/adds/add/BS = 10002



/doc/person/adds/add/note = 空ID节点啊



/doc/person/adds/add/BS = 10002



/doc/person/adds/add/note = 空ID节点啊



/doc/person/adds/add/*[name()='BS'] =



/doc/person/adds/add/note = 西安市太白路2



/doc/other/name = ASDF







Process finished with exit code 0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值