递归遍历XML所有节点

package xml;

import org.dom4j.Document;

import org.dom4j.DocumentHelper;

import org.dom4j.DocumentException;

import org.dom4j.Element;



import java.util.*;



/**

 * @author zouhailin

 * 2013-7-5

 */

public class XmlTest {



//    private static Map<String, String> xmlmap = new HashMap<String, String>();

    //存储xml元素信息的容器

    private static List<String> elemList = new ArrayList<String>();



    //要测试的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(xpath+" "+value);

        } else {

            //有子元素

            for (Iterator it = elements.iterator(); it.hasNext();) {

                Element elem = (Element) it.next();

                //递归遍历

                getElementList(elem);

            }

        }

    }



    public String getListString(List<String> elemList) {

        StringBuffer sb = new StringBuffer();

        for (Iterator<String> it = elemList.iterator(); it.hasNext();) {

            String str = it.next();

            sb.append(str+"\n");

        }

        return sb.toString();

    }

} 


你可能感兴趣的:(xml)