Java Web(3)-XML

来源:https://www.cnblogs.com/mengd/archive/2020/07/25/13378314.html
-Advertisement-
Play Games

一、XML簡介 1. 什麼是xml? xml 是可擴展的標記性語言 2. xml的作用? 用來保存數據,而且這些數據具有自我描述性 它還可以做為項目或者模塊的配置文件 還可以做為網路傳輸數據的格式(現在 JSON 為主) 二、XML語法 首先創建一個xml文件 <?xml version="1.0" ...


一、XML簡介

1. 什麼是xml?

xml 是可擴展的標記性語言

2. xml的作用?

  • 用來保存數據,而且這些數據具有自我描述性
  • 它還可以做為項目或者模塊的配置文件
  • 還可以做為網路傳輸數據的格式(現在 JSON 為主)

二、XML語法

首先創建一個xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<!--
    文件的聲明
    version="1.0"        表示xml的版本
    encoding="UTF-8"     表示xml文件本身的編碼
-->

圖書有 標識,書名,有作者,價格的信息

<?xml version="1.0" encoding="UTF-8" ?>
<!--
    文件的聲明
    version="1.0"        表示xml的版本
    encoding="UTF-8"     表示xml文件本身的編碼
-->

<!-- 多個圖書信息-->
<books>

    <!--一個圖書的基本信息-->
    <book sn="SN123454321">    <!--屬性值-->
        <name>雍正王朝</name>
        <author>二月河</author>
        <price>99</price>
    </book>

    <book sn="SN987654321">
        <name>康熙大帝</name>
        <author>二月河</author>
        <price>99</price>
    </book>
</books>
  • 註釋和html一樣
  • 其他的基本上看看就懂了

註意:

  • XML 文檔必須有根元素,並且是唯一的,就如上面的books一樣,

三、XML解析

這裡主要就使用dom4j技術來解析

首先需要到官網找到這個jar包,直接複製到當前的模塊下即可

1. Dom4j編程步驟

  • 先載入 xml 文件創建 Document 對象
  • 通過 Document 對象拿到根元素對象
  • 通過根元素.elelemts(標簽名); 可以返回一個集合,這個集合里放著。所有你指定的標簽名的元素對象
  • 找到你想要修改、刪除的子元素,進行相應在的操作
  • 保存到硬碟上或者其他地方

2. 獲取document對象

1. 首先創建一個lib包,直接把網上找到的dom4j的jar包複製到lib下,然後

2. 寫一個需要解析的books.xml文件

<?xml version="1.0" encoding="UTF-8" ?>

<books>
    <book sn="SN123454321">
        <name>雍正王朝</name>
        <author>二月河</author>
        <price>99</price>
    </book>

    <book sn="SN987654321">
        <name>康熙大帝</name>
        <author>二月河</author>
        <price>99</price>
    </book>
</books>

3. 獲取Document對象的代碼

@Test
    public void test1() throws DocumentException {

        // 1. 先創建一個SAXReader對象
        SAXReader saxReader = new SAXReader();
		// 2. 這個對象用來讀取xml文件,返回一個document
        Document read = saxReader.read("src/books.xml");
		// 3. 列印到控制台,查看是否成功
        System.out.println(read);

    }

3. 遍歷標簽獲取內容

需要分四步操作:

  • 通過創建 SAXReader 對象。來讀取 xml 文件,獲取 Document 對象
  • 通過 Document 對象。拿到 XML 的根元素對象
  • 通過根元素對象。獲取所有的 book 標簽對象
  • 遍歷每個 book 標簽對象。然後獲取到 book 標簽對象內的每一個元素,再通過 getText() 方法拿到起始標簽和結 束標簽之間的文本內容

首先寫一個Book類,用於存放數據

package com.md.java;
/**
 * @author MD
 * @create 2020-07-24 8:45
 */
public class Book {
    private String sn;
    private String name;
    private String author;
    private Double price;

    public Book() {
    }

    public Book(String sn, String name, String author, Double price) {
        this.sn = sn;
        this.name = name;
        this.author = author;
        this.price = price;
    }

    public String getSn() {
        return sn;
    }

    public void setSn(String sn) {
        this.sn = sn;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public Double getPrice() {
        return price;
    }

    public void setPrice(Double price) {
        this.price = price;
    }

    @Override
    public String toString() {
        return "Book{" +
                "sn='" + sn + '\'' +
                ", name='" + name + '\'' +
                ", author='" + author + '\'' +
                ", price=" + price +
                '}';
    }
}

讀取xml文件中的內容,xml文件就是上面的books.xml

    /**
     * 讀取books.xml文件生成的Book類
     */
    @Test
    public void test2() throws DocumentException {
        // 1. 讀取文件,在Junit測試中,相對路徑是從模塊名開始的
        SAXReader saxReader = new SAXReader();
        Document document = saxReader.read("src/books.xml");

        // 2. 通過Document對象獲取根元素
        Element rootElement = document.getRootElement();
        //System.out.println(rootElement);

        // 3. 通過根元素讀取book標簽對象
        // element()和elements()都是通過標簽名查找子元素
        List<Element> books = rootElement.elements("book");

        // 4. 遍歷處理book標簽轉換為Book類
        for (Element book:books){
            // asXML()把標簽對象轉換為標簽字元串
            // System.out.println(book.asXML());

            // 5. 獲取到了這個標簽
            Element nameElement = book.element("name");
            // 獲取這個標簽的文本內容
            String name = nameElement.getText();

            // 或者可以直接獲取標簽里的文本內容
            String price = book.elementText("price");
            String author = book.elementText("author");

            // 獲取屬性值
            String sn = book.attributeValue("sn");


            // 獲取完成之後就可以生成了,註意價格是double類型的
            System.out.println(new Book(sn,name,author,Double.parseDouble(price)));

        }

    }

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

-Advertisement-
Play Games
更多相關文章
  • 快手,快影的App保護用的是同一套代碼,反調試也很容易,下麵請看過程。 >作為一個開發者,有一個學習的氛圍跟一個交流圈子特別重要,這是一個我的iOS交流群:761407670 進群密碼‘博客’,不管你是小白還是大牛歡迎入駐 ,分享BAT,阿裡面試題、面試經驗,討論技術, 大家一起交流學習成長! 1. ...
  • 《全棧工程師 Web 開髮指南》 [作者] (意) Dino Esposito[譯者] (中) 李永倫[出版] 人民郵電出版社[版次] 2019年03月 第1版[印次] 2019年03月 第1次 印刷[定價] 79.00元 【第02章】 【選擇支撐架構】 (P018) 領域模型模式的要點是構建一個完 ...
  • Nginx基本安全優化 隱藏Nginx軟體版本號信息 一般來說,軟體的漏洞都和版本有關,這個很像汽車的缺陷,同一批次的要有問題就都有問題,別的批次可能就都是好的。因此,我們應儘量隱藏或者消除Web服務對訪問用戶顯示各類敏感信息(例如Web軟體名稱以及版本號等信息),增加惡意用戶攻擊伺服器的難度,從而 ...
  • 前言 本篇文章收錄於專輯:http://dwz.win/HjK,點擊解鎖更多數據結構與演算法的知識。 你好,我是彤哥,一個每天爬二十六層樓還不忘讀源碼的硬核男人。 上一節,我們一起學習了表示覆雜度的幾個符號,我們說,通常使用大O來表示演算法的複雜度,不僅合理,而且書寫方便。 那麼,使用大O表示法評估演算法 ...
  • data ={ '魏X':{"語文":["150"], "數學":["150"], "英語":["150"], "綜合":{ '化學':["90"], '物理':["90"], }, }, '黃XX':{"語文":["150"], "數學":["150"], "英語 ...
  • ###Windows安裝boost庫 下載鏈接:https://www.boost.org/ 學習鏈接:https://theboostcpplibraries.com/ ######1,下載解壓,我的目錄“C:\Program Files (x86)\Microsoft Visual Studio ...
  • 先上代碼, class C1(object): class_variable = 1 class C2(object): class_variable = [] object1 = C1() object2 = C2() print(C1.class_variable) # 1 print(obje ...
  • 有一段時間沒有更新文章了,因為最近參加了公司一個項目開發,要求用java寫,這樣才方便引用公司其它團隊現成的技術組件。 由於以前沒學過java,所以最近一段時間花了不少時間學java開發知識 中間遇上不少小問題,一路跌跌撞撞過來,上周終於用java寫好了一個小模塊。 由於剛接觸一塊新事務,工作比較忙 ...
一周排行
    -Advertisement-
    Play Games
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...
  • 目錄前言PostgreSql安裝測試額外Nuget安裝Person.cs模擬運行Navicate連postgresql解決方案Garnet為什麼要選擇Garnet而不是RedisRedis不再開源Windows版的Redis是由微軟維護的Windows Redis版本老舊,後續可能不再更新Garne ...
  • C#TMS系統代碼-聯表報表學習 領導被裁了之後很快就有人上任了,幾乎是無縫銜接,很難讓我不想到這早就決定好了。我的職責沒有任何變化。感受下來這個系統封裝程度很高,我只要會調用方法就行。這個系統交付之後不會有太多問題,更多應該是做小需求,有大的開發任務應該也是第二期的事,嗯?怎麼感覺我變成運維了?而 ...
  • 我在隨筆《EAV模型(實體-屬性-值)的設計和低代碼的處理方案(1)》中介紹了一些基本的EAV模型設計知識和基於Winform場景下低代碼(或者說無代碼)的一些實現思路,在本篇隨筆中,我們來分析一下這種針對通用業務,且只需定義就能構建業務模塊存儲和界面的解決方案,其中的數據查詢處理的操作。 ...
  • 對某個遠程伺服器啟用和設置NTP服務(Windows系統) 打開註冊表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer 將 Enabled 的值設置為 1,這將啟用NTP伺服器功 ...
  • title: Django信號與擴展:深入理解與實踐 date: 2024/5/15 22:40:52 updated: 2024/5/15 22:40:52 categories: 後端開發 tags: Django 信號 松耦合 觀察者 擴展 安全 性能 第一部分:Django信號基礎 Djan ...
  • 使用xadmin2遇到的問題&解決 環境配置: 使用的模塊版本: 關聯的包 Django 3.2.15 mysqlclient 2.2.4 xadmin 2.0.1 django-crispy-forms >= 1.6.0 django-import-export >= 0.5.1 django-r ...
  • 今天我打算整點兒不一樣的內容,通過之前學習的TransformerMap和LazyMap鏈,想搞點不一樣的,所以我關註了另外一條鏈DefaultedMap鏈,主要調用鏈為: 調用鏈詳細描述: ObjectInputStream.readObject() DefaultedMap.readObject ...
  • 後端應用級開發者該如何擁抱 AI GC?就是在這樣的一個大的浪潮下,我們的傳統的應用級開發者。我們該如何選擇職業或者是如何去快速轉型,跟上這樣的一個行業的一個浪潮? 0 AI金字塔模型 越往上它的整個難度就是職業機會也好,或者說是整個的這個運作也好,它的難度會越大,然後越往下機會就會越多,所以這是一 ...
  • @Autowired是Spring框架提供的註解,@Resource是Java EE 5規範提供的註解。 @Autowired預設按照類型自動裝配,而@Resource預設按照名稱自動裝配。 @Autowired支持@Qualifier註解來指定裝配哪一個具有相同類型的bean,而@Resourc... ...