使用Dom4J解析【.xml】文件

来源:https://www.cnblogs.com/xiaoguo-java/archive/2022/12/14/16982308.html
-Advertisement-
Play Games

一些老的系統或者項目,使用了.xml格式的文件進行數據存取,有時候,可能在和某些單位合作的時候,需要獲取他們系統的數據,這些數據都存放在.xml文件中,這時,我們就需要解析該文件了,J解析方式有很多,但是常用的是Dom4J,以下介紹Dom4J的解析方式 一、解析時用到的依賴 點擊查看代碼 <!-- ...


一些老的系統或者項目,使用了.xml格式的文件進行數據存取,有時候,可能在和某些單位合作的時候,需要獲取他們系統的數據,這些數據都存放在.xml文件中,這時,我們就需要解析該文件了,J解析方式有很多,但是常用的是Dom4J,以下介紹Dom4J的解析方式

一、解析時用到的依賴

點擊查看代碼
<!-- dom4j 解析xml文件 -->
        <dependency>
            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>1.6.1</version>
        </dependency>

二、示例代碼

1.代碼如下:

點擊查看代碼
package cn.itCast.manor.modules.test.xmljx;

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

import java.io.File;
import java.util.Iterator;

/**
 * @Classname Dom4JUtils
 * @Description: 解析xml文件中的相關數據
 * @Date: 2022/12/14 0014 11:56
 * @AUTHOR: 無淚之城
 * @Version 1.0
 */
public class Dom4JUtils {

    public void jxXml(File file) throws DocumentException {
        SAXReader reader = null;
        Document document = null;
        //1.創建Reader對象
        reader = new SAXReader();
        //2.載入xml
        document = reader.read(file);
        //3.獲取根節點
        Element root = document.getRootElement();


        //############################################################################################################
        //############################################################################################################
        System.out.println("#################################################" + "【檔案相關信息】" + "##########################################");
        //【一、獲取檔案相關信息】
        //1.資料名稱
        String tm = root.element("TM").getText();
        System.out.println("資料名稱: " + tm);

        //2.行政區 獲取省+市
        Element xzq = root.element("XZQList");
        String province = xzq.element("Province").getText();
        String city = xzq.element("District").getText();
        System.out.println("省:" + province);
        System.out.println("市:" + city);

        //3.工作程度
        String gzcd = root.element("GZCD").getText();
        System.out.println("工作程度:" + gzcd);

        //4.形成單位
        String xcdw = root.element("XCDWMC").getText();
        System.out.println("形成單位:" + xcdw);

        //5.作者
        String zz = root.element("BZZ").getText();
        System.out.println("作者:" + zz);

        //6.形成時間
        String xcsj = root.element("XCSJ").getText();
        System.out.println("形成時間:" + xcsj);

        //7.起始時間
        String qssj = root.element("XMQSSJ").getText();
        System.out.println("起始時間:" + qssj);

        //8.終止時間
        String zzsj = root.element("XMZZSJ").getText();
        System.out.println("終止時間:" + zzsj);

        //9.起始經度
        String qsjd = root.element("QSJDLX").getText();
        System.out.println("起始經度:" + qsjd);

        //10.終止經度
        String zzjd = root.element("ZZJDLX").getText();
        System.out.println("終止經度:" + zzjd);

        //11.起始緯度
        String qswd = root.element("QSWDLX").getText();
        System.out.println("起始緯度:" + qswd);

        //12.終止緯度
        String zzwd = root.element("ZZWDLX").getText();
        System.out.println("終止緯度:" + zzwd);

        //13.礦產
        String kc = root.element("ZYKZ").getText();
        System.out.println("礦產:" + kc);

        //14.內容摘要
        String nrzy = root.element("NRTY").getText();
        System.out.println("內容摘要:" + nrzy);

        //15.備註
        String bz = root.element("SWXXBZ").getText();
        System.out.println("備註:" + bz);

        //【檔案號、圖幅號、資料類別】手動添加
        //TODO 這裡進行檔案數據入庫操作(檔案表)


        //############################################################################################################
        //############################################################################################################
        System.out.println("#################################################" + "【成果資料信息】" + "##########################################");

        //【二、成果資料信息-多個】
        //成果文件list
        Element cgList;
        Element cgxxList;
        for (Iterator i = root.elementIterator("CGWJCList"); i.hasNext(); ) {
            //拿到每個成果文件list
            cgList = (Element) i.next();
            //遍歷每個成果文件,獲取一個成果文件中的每一個文件信息list
            for (Iterator j = cgList.elementIterator("CGWJXXList"); j.hasNext(); ) {
                //拿到每個成果文件信息list
                cgxxList = (Element) j.next();
                //文件類型
                String wjlx = cgxxList.element("WJLX").getText();
                //文件名稱
                String wjbt = cgxxList.element("WJBT").getText();
                //順序號
                String sxh = cgxxList.element("WJMC").getText();
                //截取順序號
                boolean status = sxh.contains(".");
                if (status) {
                    sxh = sxh.substring(0, sxh.indexOf("."));
                }
                //涉密信息
                String smxx = cgxxList.element("MJ").getText();

                System.out.println("文件類型:" + wjlx);
                System.out.println("文件名稱:" + wjbt);
                System.out.println("順序號:" + sxh);
                System.out.println("涉密信息:" + smxx);
                //【比例尺、載體類型、附圖類型】需要手動添加、【檔案號】在修改檔案信息時同步添加
                //TODO 在這個迴圈裡面進行入庫操作(在成果資料表)
            }
        }


        //############################################################################################################
        //############################################################################################################
        System.out.println("#################################################" + "【實物資料信息】" + "##########################################");
        //【三、實物資料信息】

        //岩礦心(孔)
        String ykx = root.element("SWYKX").getText();
        //總進尺
        String zjc = root.element("SWZJC").getText();
        //樣品
        String yp = root.element("SWYP").getText();
        //岩屑
        String yx = root.element("SWYX").getText();
        //薄片
        String bp = root.element("SWBP").getText();
        //標本
        String bb = root.element("SWBB").getText();
        //取心
        String qx = root.element("SWQX").getText();
        //光片
        String gp = root.element("SWGP").getText();
        //大地構造位置
        String ddgzwz = root.element("DDGZWZ").getText();
        //成礦帶
        String ckd = root.element("CKD").getText();
        //主要礦種
        String zykz = root.element("ZYKZ").getText();


        System.out.println("岩礦心(孔): " + ykx);
        System.out.println("總進尺: " + zjc);
        System.out.println("樣品: " + yp);
        System.out.println("岩屑: " + yx);
        System.out.println("薄片: " + bp);
        System.out.println("標本: " + bb);
        System.out.println("取心: " + qx);
        System.out.println("光片: " + gp);
        System.out.println("大地構造位置: " + ddgzwz);
        System.out.println("成礦帶: " + ckd);
        System.out.println("主要礦種: " + zykz);
        //【檔案號】手動添加
        //TODO 這裡進行數據入庫操作(實物資料表)


        //############################################################################################################
        //############################################################################################################
        System.out.println("#################################################" + "【原始資料信息】" + "##########################################");

        //【四、原始資料信息】


        Element ysList;//原始文件list
        Element ysxxList; //原始文件信息list
        for (Iterator i = root.elementIterator("YSWJMLList"); i.hasNext(); ) {
            //拿到每個原始文件list
            ysList = (Element) i.next();
            //遍歷每個原始文件,獲取一個原始文件中的每一個文件信息list
            for (Iterator j = ysList.elementIterator("YSWJXXList"); j.hasNext(); ) {
                //拿到每個原始文件信息list
                ysxxList = (Element) j.next();
                //文件類型
                String wjlx = ysxxList.element("LBDZ").getText();
                //文件名稱
                String wjbt = ysxxList.element("WJMC").getText();
                //順序號(需要截取一下)
                String sxh = ysxxList.element("DZWJM").getText();
                //截取順序號
                boolean status = sxh.contains(".");
                if (status) {
                    sxh = sxh.substring(0, sxh.indexOf("."));
                }
                //載體類型
                String ztlx = ysxxList.element("ZTXS").getText();
                //涉密信息
                String smxx = ysxxList.element("MJ").getText();

                System.out.println("文件類型:" + wjlx);
                System.out.println("文件名稱:" + wjbt);
                System.out.println("順序號:" + sxh);
                System.out.println("載體類型:" + ztlx);
                System.out.println("涉密信息:" + smxx);

                //【檔案號、比例尺】手動添加
                // TODO 這裡進行數據入庫操作(實物資料表)
            }
        }
    }
}

2.如果需要對數據進行進一步的操作的話,就根據代碼中的註釋處去添加相關代碼即可,本次示例,沒有寫資料庫相關的代碼(很簡單~)

3.測試使用的【.xml】文件在這裡

鏈接 密碼
下載:https://wwuh.lanzout.com/illCv0insjrg hssp

本文來自博客園,作者:青喺半掩眉砂,轉載請註明原文鏈接:https://www.cnblogs.com/xiaoguo-java/p/16982308.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 聽說過使用python在網站爬蟲,或者數據清洗,或者人工智慧原型驗證,但是用在GUI開發上倒是頭一回。今兒就來瞧瞧怎麼個玩法! ...
  • 傢具網購項目實現01 1.項目開發環境搭建 創建一個web項目,添加需要的jar包(暫不使用Maven) 依照5.1的表格來創建項目的大體分層: 2.功能01-搭建前端頁面 2.1需求分析/圖解 2.2思路分析 略 2.3代碼實現 將前端人員給的靜態頁面拷貝到web目錄下即可 資源詳見:https: ...
  • 1.註釋 1 # 單行註釋 這是單行註釋 2 '''多行註釋''' 這是多行註釋 3 """多行註釋""" 這是多行註釋 2.標識符 我們自己在寫代碼的時候取的名字,命名的符號 1 項目名 >project name 2 包名 >package name 3 模塊名 > .py python文件名 ...
  • Python3.7.3安裝(Win10) 到2019年初,Python3已經更新到了Python3.7.3,Python有兩個大版本Python2和Python3,Python3是現在和未來的主流。 本文介紹Python3.7.3的安裝步驟. 一、下載Python3.7.3 1.百度搜索Python ...
  • deque:雙端隊列容器(隊頭隊尾都可入,出) 底層數據結構情況 動態開闢的二維數組,一維數組從2開始,以2倍方式進行擴容,每次擴容後,原來第二維數組 從新的第一維數組的下標oldsize/2 開始存儲 如下列圖序 滿了擴容,擴容第1維,2倍擴 deque deq; 增加: deq.push_bac ...
  • STL (standard template libaray - 標準模板庫):是 C++ 標準庫的重要組成部分,不僅是一個可復用的組件庫,而且是一個包羅數據結構與演算法的軟體框架。 通俗來說:STL就是將常見的數據結構(例如 順序表,鏈表,棧,隊列,二叉樹,哈希...)以模板的形式進行封裝,使用時, ...
  • 如果Maven項目用原生Maven命令能夠正常打包構建,但在IDEA中無法識別。 解決方案: 1. 首先重新載入下Maven項目,可能重新載入下就好了,因為很多時候在IDEA導入Maven項目是被中斷了,中斷原因可能是人為的,也可能是因為網路等問題導致。 2. 如果提示 POM 有誤(誤報),甚至構 ...
  • 作者:董子龍 前言 記得那是2022年秋天的第一場雨,比2021年來的稍晚一些,在那個秋雨朦朧的下午,正在工位上奮筆疾書的我突然聽到了前面波哥對著手機聽筒說出來的"溫柔"的話語:說說你瞭解的spring-aop。話音剛落,aop這三個字便猶如一把利劍一樣狠狠的扎到了我的心上,讓我的腦海中頓時浮現了當 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...