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

        }

    }
Tags: