久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    Dom4j遍歷解析XML測試

     CevenCheng 2011-07-31
    Dom4j遍歷解析XML測試
     
    近來老和XML打交道,不深挖不行了。。
     
    這是一個Dom4j解析XML的例子,為做復雜遞歸處理前期所寫的例子。涵蓋了XML的解析方面大部分核心API。
     
    環境:
    Dom4j-1.6.1
     
    Dom4j解析需要XML需要的最小類庫為:
    dom4j-1.6.1.jar
    jaxen-1.1-beta-6.jar
     
    目標:
    解析一個xml,輸出所有的屬性和元素值。
     
    測試代碼:
     
    XML文件:
    <?xml version="1.0" encoding="GBK"?> 
    <doc> 
        <person id="1" sex="m"> 
            <name>zhangsan</name> 
            <age>32</age> 
            <adds> 
                <add code="home">home add</add> 
                <add code="com">com add</add> 
            </adds> 
        </person> 
        <person id="2" sex="w"> 
            <name>lisi</name> 
            <age>22</age> 
            <adds> 
                <add ID="22" id="23" code="home">home add</add> 
                <add ID="23" id="22" code="com">com add</add> 
                <add id="24" code="com">com add</add> 
            </adds> 
        </person> 
    </doc>
     
     
    解析代碼:
    package com.topsoft.test; 

    import org.dom4j.io.SAXReader; 
    import org.dom4j.Document; 
    import org.dom4j.DocumentException; 
    import org.dom4j.Element; 
    import org.dom4j.Node; 

    import java.util.Iterator; 
    import java.util.List; 
    import java.io.InputStream; 

    /** 
    * Created by IntelliJ IDEA.<br> 
    * <b>User</b>: leizhimin<br> 
    * <b>Date</b>: 2008-3-26 15:53:51<br> 
    * <b>Note</b>: Dom4j遍歷解析XML測試 
    */
     
    public class TestDom4j { 
        /** 
         * 獲取指定xml文檔的Document對象,xml文件必須在classpath中可以找到 
         * 
         * @param xmlFilePath xml文件路徑 
         * @return Document對象 
         */
     
        public static Document parse2Document(String xmlFilePath) { 
            SAXReader reader = new SAXReader(); 
            Document document = null
            try { 
                InputStream in = TestDom4j.class.getResourceAsStream(xmlFilePath); 
                document = reader.read(in); 
            } catch (DocumentException e) { 
                System.out.println(e.getMessage()); 
                System.out.println("讀取classpath下xmlFileName文件發生異常,請檢查CLASSPATH和文件名是否存在!"); 
                e.printStackTrace(); 
            } 
            return document; 
        } 

        public static void testParseXMLData(String xmlFileName) { 
            //產生一個解析器對象 
            SAXReader reader = new SAXReader(); 
            //將xml文檔轉換為Document的對象 
            Document document = parse2Document(xmlFileName); 
            //獲取文檔的根元素 
            Element root = document.getRootElement(); 
            //定義個保存輸出xml數據的緩沖字符串對象 
            StringBuffer sb = new StringBuffer(); 
            sb.append("通過Dom4j解析XML,并輸出數據:\n"); 
            sb.append(xmlFileName + "\n"); 
            sb.append("----------------遍歷start----------------\n"); 
            //遍歷當前元素(在此是根元素)的子元素 
            for (Iterator i_pe = root.elementIterator(); i_pe.hasNext();) { 
                Element e_pe = (Element) i_pe.next(); 
                //獲取當前元素的名字 
                String person = e_pe.getName(); 
                //獲取當前元素的id和sex屬性的值并分別賦給id,sex變量 
                String id = e_pe.attributeValue("id"); 
                String sex = e_pe.attributeValue("sex"); 
                String name = e_pe.element("name").getText(); 
                String age = e_pe.element("age").getText(); 
                //將數據存放到緩沖區字符串對象中 
                sb.append(person + ":\n"); 
                sb.append("\tid=" + id + " sex=" + sex + "\n"); 
                sb.append("\t" + "name=" + name + " age=" + age + "\n"); 

                //獲取當前元素e_pe(在此是person元素)下的子元素adds 
                Element e_adds = e_pe.element("adds"); 
                sb.append("\t" + e_adds.getName() + "\n"); 

                //遍歷當前元素e_adds(在此是adds元素)的子元素 
                for (Iterator i_adds = e_adds.elementIterator(); i_adds.hasNext();) { 
                    Element e_add = (Element) i_adds.next(); 
                    String code = e_add.attributeValue("code"); 
                    String add = e_add.getTextTrim(); 
                    sb.append("\t\t" + e_add.getName() + ":" + " code=" + code + " value=\"" + add + "\"\n"); 
                } 
                sb.append("\n"); 
            } 
            sb.append("-----------------遍歷end-----------------\n"); 
            System.out.println(sb.toString()); 


            System.out.println("---------通過XPath獲取一個元素----------"); 
            Node node1 = document.selectSingleNode("/doc/person"); 
            System.out.println("輸出節點:" + 
                    "\t"+node1.asXML()); 

            Node node2 = document.selectSingleNode("/doc/person/@sex"); 
            System.out.println("輸出節點:" + 
                    "\t"+node2.asXML()); 

            Node node3 = document.selectSingleNode("/doc/person[name=\"zhangsan\"]/age"); 
            System.out.println("輸出節點:" + 
                    "\t"+node3.asXML()); 

            System.out.println("\n---------XPath獲取List節點測試------------"); 
            List list = document.selectNodes("/doc/person[name=\"zhangsan\"]/adds/add"); 
            for(Iterator it=list.iterator();it.hasNext();){ 
                Node nodex=(Node)it.next(); 
                System.out.println(nodex.asXML()); 
            } 

            System.out.println("\n---------通過ID獲取元素的測試----------"); 
            System.out.println("陷阱:通過ID獲取,元素ID屬性名必須為“大寫ID”,小寫的“id”會認為是普通屬性!"); 
            String id22 = document.elementByID("22").asXML(); 
            String id23 = document.elementByID("23").asXML(); 
            String id24 = null
            if (document.elementByID("24") != null) { 
                id24 = document.elementByID("24").asXML(); 
            } else { 
                id24 = "null"
            } 

            System.out.println("id22=  " + id22); 
            System.out.println("id23=  " + id23); 
            System.out.println("id24=  " + id24); 
        } 


        public static void main(String args[]) { 
            testParseXMLData("/person.xml"); 
        } 
    }
     
     
    運行結果:
    通過Dom4j解析XML,并輸出數據: 
    /person.xml 
    ----------------遍歷start---------------- 
    person: 
        id=1 sex=m 
        name=zhangsan age=32 
        adds 
      add: code=home value="home add" 
      add: code=com value="com add" 

    person: 
        id=2 sex=w 
        name=lisi age=22 
        adds 
      add: code=home value="home add" 
      add: code=com value="com add" 
      add: code=com value="com add" 

    -----------------遍歷end----------------- 

    ---------通過XPath獲取一個元素---------- 
    輸出節點:    <person id="1" sex="m"> 
            <name>zhangsan</name> 
            <age>32</age> 
            <adds> 
                <add code="home">home add</add> 
                <add code="com">com add</add> 
            </adds> 
        </person> 
    輸出節點:    sex="m" 
    輸出節點:    <age>32</age> 

    ---------XPath獲取List節點測試------------ 
    <add code="home">home add</add> 
    <add code="com">com add</add> 

    ---------通過ID獲取元素的測試---------- 
    陷阱:通過ID獲取,元素ID屬性名必須為“大寫ID”,小寫的“id”會認為是普通屬性! 
    id22=  <add ID="22" id="23" code="home">home add</add> 
    id23=  <add ID="23" id="22" code="com">com add</add> 
    id24=  null 

    Process finished with exit code 0 
     
    發個Idea7開發界面截圖: 點擊圖片放大
     
     
    想從頭了解dom4j的朋友可以看dom4j文檔中的quick start,這個是E文版的,另外有熱心的網友已經將自己翻譯的中文版奉獻出來了,可以看看:

      本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發現有害或侵權內容,請點擊一鍵舉報。
      轉藏 分享 獻花(0

      0條評論

      發表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 亚洲欧美偷国产日韩| 中文字幕国产精品日韩| 性一交一乱一伦一| 成人免费A级毛片无码片2022| 欧美综合人人做人人爱| 国产精品v片在线观看不卡| 免费国产VA在线观看视频| 永久黄网站色视频免费直播| 老司机午夜精品视频资源| 日本55丰满熟妇厨房伦| 国产一区二区不卡91| 国产精品一区二区久久不卡| 日韩中文字幕亚洲精品| 高清无码一区二区在线观看吞精| 人妻少妇偷人精品一区| 精品无码一区二区三区亚洲桃色| 国产精品免费视频不卡| 精品无码AV无码专区| 国产乱子伦视频在线播放 | 久久99国产精品尤物| 亚洲综合色成在线观看| 老师扒下内裤让我爽了一夜| 国产良妇出轨视频在线观看| 亚洲日本欧洲二区精品| 亚洲精品乱码久久久久久蜜桃不卡| 国产黑色丝袜在线播放| 无码精品久久久久久人妻中字| 亚洲精品成人久久久| 麻豆国产成人AV在线播放| 国产农村妇女毛片精品久久| 成人午夜看黄在线尤物成人| 国产午夜亚洲精品国产成人| 无码8090精品久久一区| 无码A级毛片免费视频下载| 日韩人妻中文字幕精品| 亚洲AV无码一区二区三区性色| 国产精品爆乳在线播放第一人称| 国产午夜福利视频在线| 亚洲AV无码乱码国产麻豆| 国产农村妇女高潮大叫| 麻豆国产成人AV在线播放|