1. 程式人生 > 實用技巧 >Java Web(3)-XML

Java Web(3)-XML

一、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)));

        }

    }