dom4j遍历解析xml

1,dom4j相对于其他xml解析技术来说,具有性能好、速度快、功能强大、编写简单等特点,所以受到广泛应用。


2,本例基于  dom4j-1.6.1.jar  编写 通用解析示例工具类,架包可点击 该名称下载。


3,工具类不针对特定xml文档结构解析,一招制敌,解析任何文档结构的xml数据,小伙伴们可以通过工具类结合自己实际项目业务需求进行封装加工。


4, 一个xml文档。

<result>
	<dates>
		<rstate>success</rstate>
		<rcode>200</rcode>
		<databasic>
			<allcount>168649810</allcount>
			<pageno>1</pageno>
			<pagesize>2</pagesize>
		</databasic>
		<details>
			<record>
				<RID>494847331</RID>
				<IR_URLTITLE>境外非政府组织在华活动被纳入法治轨道</IR_URLTITLE>
				<IR_ABSTRACT>十二届全国人大常委会第二十次会议28日下午表决通过《中华人民共和国境外非政府组织境内活动管理法》。</IR_ABSTRACT>
				<IR_URLNAME>http://203.192.15.131/content/20160429/Articel02004BB.htm</IR_URLNAME>
				<IR_URLTIME>2017-01-01 00:00:00</IR_URLTIME>
				<IR_AUTHORS>null</IR_AUTHORS>
				<IR_SITENAME>新华每日电讯</IR_SITENAME>
				<IR_CHANNEL>要闻</IR_CHANNEL>
				<SY_INFOTYPE>7</SY_INFOTYPE>
				<IR_GROUPFLAG>0</IR_GROUPFLAG>
				<IR_COUNT1>null</IR_COUNT1>
				<IR_COUNT2>null</IR_COUNT2>
				<IR_COUNT3>null</IR_COUNT3>
				<IR_ACCOUNT_UID>null</IR_ACCOUNT_UID>
				<SY_BB_COMMON>null</SY_BB_COMMON>
			</record>
			<record>
				<RID>419928990</RID>
				<IR_URLTITLE>本报记者带您走进城市周边绿化现场</IR_URLTITLE>
				<IR_ABSTRACT>本报记者带您走进城市周边绿化现场</IR_ABSTRACT>
				<IR_URLNAME>http://paper.cynews.com.cn/File/yanduchenbao/2016-4-11/20160411093651.htm?id=176117</IR_URLNAME>
				<IR_URLTIME>2016-11-04 00:00:00</IR_URLTIME>
				<IR_AUTHORS>null</IR_AUTHORS>
				<IR_SITENAME>燕都晨报</IR_SITENAME>
				<IR_CHANNEL>null</IR_CHANNEL>
				<SY_INFOTYPE>7</SY_INFOTYPE>
				<IR_GROUPFLAG>0</IR_GROUPFLAG>
				<IR_COUNT1>null</IR_COUNT1>
				<IR_COUNT2>null</IR_COUNT2>
				<IR_COUNT3>null</IR_COUNT3>
				<IR_ACCOUNT_UID>null</IR_ACCOUNT_UID>
				<SY_BB_COMMON>null</SY_BB_COMMON>
			</record>
		</details>
	</dates>
</result>



5,一个保存xml结构的 实体。

package com.trs.xmldeal;

/**
 * 保存xml结构基本信息实体
 * @author zhaozuofa
 * 2016年5月9日 下午2:19:46
 *
 */
public class XmlParamer {
    // 节点属性   
    private String xattribute;

    // 节点PATH   
    private String xpath;

    // 节点值   
    private String value;

    public XmlParamer(String xattribute, String xpath, String value) {
        this.xattribute = xattribute;
        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;
    }

    public String getXattribute() {
        return xattribute;
    }

    public void setXattribute(String xattribute) {
        this.xattribute = xattribute;
    }
}

6,一个解析xml 的工具类


package com.trs.xmldeal;

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;
import org.dom4j.tree.DefaultAttribute;

/**
 * Java递归遍历XML所有元素  
 * @author zhaozuofa
 * 2016年5月9日 下午2:18:43
 *
 */
public class XmlParase {
    // private static Map xmlmap = new HashMap();    
    //存储xml元素信息的容器    
    private static ArrayList<Leaf> elemList = new ArrayList<Leaf>();

    public static void main(String args[]) throws DocumentException {
        XmlParase test = new XmlParase();
        String path = "d:\\test\\NewFile3.xml";
        // 读取XML文件   
        SAXReader reader = new SAXReader();
        Document doc = reader.read(path);
        
        // 获取XML根元素   
        Element root = doc.getRootElement();
        test.getElementList(root);
        String x = test.getListString(elemList);
        System.out.println("-----------解析结果------------\n" + x);
    }

    /**   
     * 获取节点所有属性值  
     * <功能详细描述>  
     * @param element  
     * @return  
     * @see [类、类#方法、类#成员]  
     */
    public String getNoteAttribute(Element element) {
        String xattribute = "";
        DefaultAttribute e = null;
        List list = element.attributes();
        for (int i = 0; i < list.size(); i++) {
            e = (DefaultAttribute) list.get(i);
            xattribute += " [name = " + e.getName() + ", value = " + e.getText() + "]";
        }
        return xattribute;
    }

    /**   
     * 递归遍历方法   
     * <功能详细描述>  
     * @param element  
     * @see [类、类#方法、类#成员]  
     */
    public void getElementList(Element element) {
        List elements = element.elements();
        // 没有子元素    
        if (elements.isEmpty()) {
            String xpath = element.getPath();
            String value = element.getTextTrim();
            elemList.add(new Leaf(getNoteAttribute(element), xpath, value));
        } else {
            // 有子元素   
            Iterator it = elements.iterator();
            while (it.hasNext()) {
                Element elem = (Element) it.next();
                // 递归遍历    
                getElementList(elem);
            }
        }
    }

    public String getListString(List elemList) {
        StringBuffer sb = new StringBuffer();
        for (Iterator it = elemList.iterator(); it.hasNext();) {
            XmlParamer xmlp = (XmlParamer) it.next();
            sb.append("xpath: " + xmlp.getXpath()).append(", value: ").append(xmlp.getValue());
            if (!"".equals(xmlp.getXattribute())) {
                sb.append(", Attribute: ").append(xmlp.getXattribute());
            }
            sb.append("\n");
        }
        return sb.toString();
    }
}





你可能感兴趣的:(java,xml,解析,dom4j,遍历)