最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用dom4j遞歸解析節(jié)點內還含有多個節(jié)點的xml

 更新時間:2021年09月25日 12:08:30   作者:Lophole  
這篇文章主要介紹了使用dom4j遞歸解析節(jié)點內還含有多個節(jié)點的xml,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

dom4j遞歸解析節(jié)點內還含有多個節(jié)點的xml

介紹了dom4j的一些平常使用

dom4j的介紹:

dom4j是一個Java的XML API,是jdom的升級品,用來讀寫XML文件的。dom4j是一個十分優(yōu)秀的JavaXML API,具有性能優(yōu)異、功能強大和極其易使用的特點,它的性能超過sun公司官方的dom技術,同時它也是一個開放源代碼的軟件,可以在SourceForge上找到它。在IBM developerWorks上面還可以找到一篇文章,對主流的Java XML API進行的性能、功能和易用性的評測,所以可以知道dom4j無論在哪個方面都是非常出色的。如今可以看到越來越多的Java軟件都在使用dom4j來讀寫XML,特別值得一提的是連Sun的JAXM也在用dom4j。這已經是必須使用的jar包, Hibernate也用它來讀寫配置文件。

這里的xml文件為(嵌套了兩層,建在本地,隨便放在哪個文件夾):

<xml>
    <ToUserName><![CDATA[toUser]]></ToUserName>
    <FromUserName><![CDATA[fromUser]]></FromUserName>
    <CreateTime>1348831860</CreateTime>
    <MsgType><![CDATA[text]]></MsgType>
    <Content><![CDATA[this is a test]]></Content>
    <MsgId>
        <ToUserName><![CDATA[1]]></ToUserName>
            <MsgId>
                <ToUserName><![CDATA[2]]></ToUserName>
                <ToUserName><![CDATA[3]]></ToUserName>
            </MsgId>
        <FromUserName><![CDATA[4]]></FromUserName>
    </MsgId>
</xml>

下面是main方法以及兩個解析方法

方法說明:

parseXML(Element e);這個是解析單個的,含有dom4j的基本用法。

dom4j下載:https://dom4j.github.io/

parseMutiXML(Element e);這個是解析含有多個節(jié)點的XML,加了一層判斷,即判斷節(jié)點還有沒有子節(jié)點,如果沒有,直接打印出來,反之重新遞歸使用方法,達到再解析的效果。

package xaiver.cn;
import java.io.File;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class CopyOfParseXml {
    public static void main(String[] args) throws Exception {
        // 這里直接解析xml,用到dom4j的包
        // 1.讀取文件信息,三種方法讀取,1創(chuàng)建saxdom方法,2根據跟元素內容讀取,3創(chuàng)建dom文件讀取
        SAXReader reader = new SAXReader();
        Document document = reader.read(new File(
                "E:\\WorkSpace\\JavaSE\\Day01_HelloWorld\\src\\xmlparse.xml"));
        Element element = document.getRootElement();
        parseMutiXML(element);
    }
    @SuppressWarnings("unused")
    private static void parseXML(Element element) {
        // 得到名稱測試,測試結果為xml,需要獲取這個的根節(jié)點
        String name = element.getName();
        System.out.println(name);
        // 根節(jié)點再獲取根節(jié)點
        @SuppressWarnings("unchecked")
        List<Element> list = element.elements();
        // 再獲取根節(jié)點的List和里面的內容,用增強for循環(huán)
        for (Element e : list) {
            System.out.println(e.getName() + "==>" + e.getTextTrim());
        }
    }
    private static void parseMutiXML(Element root) {
        @SuppressWarnings("unchecked")
        List<Element> list = root.elements();
        if (list.size()==0) {
            System.out.println(root.getName()+"==>"+root.getTextTrim());
        }else {
            for (Element element:list) {
                parseMutiXML(element);
            }
        }
    }
}

執(zhí)行結果:

ToUserName==>toUser
FromUserName==>fromUser
CreateTime==>1348831860
MsgType==>text
Content==>this is a test
ToUserName==>1
ToUserName==>2
ToUserName==>3
FromUserName==>4

dom4j遞歸解析XML字符串所有子節(jié)點

/**
       * dom4j遞歸解析所有子節(jié)點
       *
       * @param childElements
       * @param mapEle
       * @return
       */
      public Map<String, Object> getElementsToString(String print) {
        //解析返回的xml字符串,生成document對象
            Document document = null;
            Map<String,Object> mapEle = null;
            try{
                document = DocumentHelper.parseText(print);
                //根節(jié)點
                Element root = document.getRootElement();
                //子節(jié)點
                List<Element> childElements = root.elements();
                mapEle = new HashMap<String, Object>();
                //遍歷子節(jié)點
                mapEle = getAllElements(childElements,mapEle);
            }catch(DocumentException e){
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return mapEle;
      }
      /**
       * dom4j遞歸解析所有子節(jié)點
       *
       * @param childElements
       * @param mapEle
       * @return
       */
      public static Map<String, Object> getAllElements(List<Element> childElements,Map<String,Object> mapEle) {
          for (Element ele:childElements){
              mapEle.put(ele.getName(), ele.getText());
              if(ele.elements().size()>0){
                  mapEle = getAllElements(ele.elements(), mapEle);
              }
          }
          return mapEle;
      }

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 詳解Sentinel流量控制限流框架的原理與使用

    詳解Sentinel流量控制限流框架的原理與使用

    Sentinel 是一個高可用、高擴展、高穩(wěn)定性的開源流量控制和熔斷降級框架,可以在分布式系統(tǒng)中實現實時的流量控制,下面就來和大家聊聊是具體如何操作的吧
    2023-05-05
  • Java基礎之Web服務器與Http詳解

    Java基礎之Web服務器與Http詳解

    無論你是前端開發(fā)者還是后端開發(fā)者,以及測試工程師,這篇文章的知識都是你需要弄懂的。讀完這一篇文章,將全面弄懂 HTTP 協議、TCP 協議,面試官再也難不倒你相關知識
    2021-09-09
  • java開發(fā)ExecutorService監(jiān)控實現示例詳解

    java開發(fā)ExecutorService監(jiān)控實現示例詳解

    這篇文章主要為大家介紹了java開發(fā)ExecutorService監(jiān)控實現示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • java實現抖音代碼舞源碼

    java實現抖音代碼舞源碼

    這篇文章主要為大家詳細介紹了java實現抖音代碼舞的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • Java之哈夫曼壓縮原理案例講解

    Java之哈夫曼壓縮原理案例講解

    這篇文章主要介紹了Java之哈夫曼壓縮原理案例講解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-08-08
  • SpringBoot 改造成https訪問的實現

    SpringBoot 改造成https訪問的實現

    這篇文章主要介紹了SpringBoot 改造成https訪問的實現,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • SpringSecurity在單機環(huán)境下使用方法詳解

    SpringSecurity在單機環(huán)境下使用方法詳解

    本文詳細介紹了SpringSecurity和SpringBoot的整合過程,包括配置用戶認證、JSP頁面的使用、數據庫認證以及授權功能的實現,感興趣的朋友一起看看吧
    2025-02-02
  • springboot中如何通過cors協議解決跨域問題

    springboot中如何通過cors協議解決跨域問題

    這篇文章主要介紹了springboot中通過cors協議解決跨域問題,cors是一個w3c標準,它允許瀏覽器(目前ie8以下還不能被支持)像我們不同源的服務器發(fā)出xmlHttpRequest請求,我們可以繼續(xù)使用ajax進行請求訪問。具體內容詳情大家跟隨腳本之家小編一起學習吧
    2018-05-05
  • 圖解Java?ReentrantLock的條件變量Condition機制

    圖解Java?ReentrantLock的條件變量Condition機制

    想必大家都使用過wait()和notify()這兩個方法把,他們主要用于多線程間的協同處理。而RenentrantLock也支持這樣條件變量的能力,而且相對于synchronized?更加強大,能夠支持多個條件變量,本文就來詳細說說
    2022-10-10
  • java實現插入排序算法

    java實現插入排序算法

    插入排序算法是一個對少量元素進行排序的有效算法。插入排序的工作原理與打牌時整理手中的牌的做法類似,開始摸牌時,我們的左手是空的,接著一次從桌上摸起一張牌,并將它插入到左手的正確位置。
    2015-04-04

最新評論

阳朔县| 铁力市| 阜宁县| 个旧市| 常德市| 兴安盟| 焦作市| 金秀| 平和县| 衡东县| 三亚市| 屯昌县| 盐边县| 康定县| 雅安市| 鹤庆县| 康马县| 若尔盖县| 突泉县| 九龙城区| 青铜峡市| 镇宁| 运城市| 棋牌| 元谋县| 兴义市| 宣城市| 界首市| 呼伦贝尔市| 泰宁县| 吴桥县| 扎赉特旗| 大同县| 刚察县| 沈丘县| 永新县| 高尔夫| 桃源县| 洛川县| 罗田县| 武强县|