欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用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;
      }

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

相關文章

  • SpringBoot的@EnableAsync和@Async注解分析

    SpringBoot的@EnableAsync和@Async注解分析

    這篇文章主要介紹了SpringBoot的@EnableAsync和@Async注解分析,Spring Boot是一個快速開發(fā)框架,可以幫助開發(fā)人員快速構建基于Spring的應用程序,需要的朋友可以參考下
    2023-07-07
  • java跟蹤執(zhí)行的sql語句示例分享

    java跟蹤執(zhí)行的sql語句示例分享

    這篇文章主要介紹了java跟蹤執(zhí)行的sql語句示例分享,需要的朋友可以參考下
    2014-03-03
  • @Scheduled 如何讀取動態(tài)配置文件

    @Scheduled 如何讀取動態(tài)配置文件

    這篇文章主要介紹了@Scheduled 如何讀取動態(tài)配置文件的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Mybatis通過攔截器實現單數據源內多數據庫切換

    Mybatis通過攔截器實現單數據源內多數據庫切換

    這篇文章主要為大家詳細介紹了Mybatis如何通過攔截器實現單數據源內多數據庫切換,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-12-12
  • Java Mybatis批量修改封裝詳解

    Java Mybatis批量修改封裝詳解

    這篇文章主要介紹了Mybatis批量修改封裝的相關內容,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 詳解Spring Batch 輕量級批處理框架實踐

    詳解Spring Batch 輕量級批處理框架實踐

    這篇文章主要介紹了詳解Spring Batch 輕量級批處理框架實踐,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-06-06
  • 淺談Spring 解決循環(huán)依賴必須要三級緩存嗎

    淺談Spring 解決循環(huán)依賴必須要三級緩存嗎

    這篇文章主要介紹了淺談Spring 解決循環(huán)依賴必須要三級緩存嗎,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • myeclipse無法部署項目問題及解決方法

    myeclipse無法部署項目問題及解決方法

    最近小編遇到到棘手的問題,myeclipse無法部署項目,點擊這個部署按鈕沒有反應。怎么解決呢,下面小編給大家代理的myeclipse無法部署項目問題及解決方法 ,感興趣的朋友一起看看吧
    2018-10-10
  • java事務的概念淺析

    java事務的概念淺析

    在本篇內容里小編給大家整理的是一篇關于java事務的概念淺析,有興趣的朋友們可以參考學習下。
    2020-12-12
  • 詳述IntelliJ IDEA遠程調試Tomcat的方法(圖文)

    詳述IntelliJ IDEA遠程調試Tomcat的方法(圖文)

    本篇文章主要介紹了詳述IntelliJ IDEA遠程調試Tomcat的方法,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12

最新評論