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
  • 前言 在我們開發過程中基本上不可或缺的用到一些敏感機密數據,比如SQL伺服器的連接串或者是OAuth2的Secret等,這些敏感數據在代碼中是不太安全的,我們不應該在源代碼中存儲密碼和其他的敏感數據,一種推薦的方式是通過Asp.Net Core的機密管理器。 機密管理器 在 ASP.NET Core ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 順序棧的介面程式 目錄順序棧的介面程式頭文件創建順序棧入棧出棧利用棧將10進位轉16進位數驗證 頭文件 #include <stdio.h> #include <stdbool.h> #include <stdlib.h> 創建順序棧 // 指的是順序棧中的元素的數據類型,用戶可以根據需要進行修改 ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • C總結與剖析:關鍵字篇 -- <<C語言深度解剖>> 目錄C總結與剖析:關鍵字篇 -- <<C語言深度解剖>>程式的本質:二進位文件變數1.變數:記憶體上的某個位置開闢的空間2.變數的初始化3.為什麼要有變數4.局部變數與全局變數5.變數的大小由類型決定6.任何一個變數,記憶體賦值都是從低地址開始往高地 ...
  • 如果讓你來做一個有狀態流式應用的故障恢復,你會如何來做呢? 單機和多機會遇到什麼不同的問題? Flink Checkpoint 是做什麼用的?原理是什麼? ...
  • C++ 多級繼承 多級繼承是一種面向對象編程(OOP)特性,允許一個類從多個基類繼承屬性和方法。它使代碼更易於組織和維護,並促進代碼重用。 多級繼承的語法 在 C++ 中,使用 : 符號來指定繼承關係。多級繼承的語法如下: class DerivedClass : public BaseClass1 ...
  • 前言 什麼是SpringCloud? Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發便利性簡化了分散式系統的開發,比如服務註冊、服務發現、網關、路由、鏈路追蹤等。Spring Cloud 並不是重覆造輪子,而是將市面上開發得比較好的模塊集成進去,進行封裝,從 ...
  • class_template 類模板和函數模板的定義和使用類似,我們已經進行了介紹。有時,有兩個或多個類,其功能是相同的,僅僅是數據類型不同。類模板用於實現類所需數據的類型參數化 template<class NameType, class AgeType> class Person { publi ...
  • 目錄system v IPC簡介共用記憶體需要用到的函數介面shmget函數--獲取對象IDshmat函數--獲得映射空間shmctl函數--釋放資源共用記憶體實現思路註意 system v IPC簡介 消息隊列、共用記憶體和信號量統稱為system v IPC(進程間通信機制),V是羅馬數字5,是UNI ...