XML配置文件,學習框架需要的知識,帶解析演示

寫在前面: 這篇文章介紹XML的語法以及使用,還有使用java解析xml。
希望能夠對大家有所幫助,點贊支持是我最大的動力!
作者公衆號:小白編碼

XML是什麼?

  • XML 指可擴展標記語言(EXtensible Markup Language)
  • XML 是一種標記語言,很類似 HTML
  • XML 的設計宗旨是傳輸數據,而非顯示數據
  • XML 標籤沒有被預定義。您需要自行定義標籤
  • XML 被設計爲具有自我描述性
  • XML 是 W3C 的推薦標準

XML 與 HTML 的主要差異

XML 不是 HTML 的替代。

XML 和 HTML 爲不同的目的而設計:

XML 被設計爲傳輸和存儲數據,其焦點是數據的內容。

HTML 被設計用來顯示數據,其焦點是數據的外觀。

HTML 旨在顯示信息,而 XML 旨在傳輸信息。

html 標籤:

格式:<標籤名>封裝的數據</標籤名>
單標籤: <標籤名/> <br /> 換行<hr />水平線
雙標籤<標籤名>封裝的數據</標籤名>
標籤名大小寫不敏感
標籤有屬性,有基本屬性和事件屬性
標籤要閉合(不閉合,html 中不報錯。但我們要養成良好的書寫習慣。閉合)

xml 的主要作用有:

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

xml 語法

  1. 文檔聲明。
  2. 元素(標籤)
  3. xml 屬性
  4. xml 註釋
  5. 文本區域(CDATA 區)

屬性:
version 是版本號
encoding 是xml 的文件編碼
standalone=“yes/no” 表示這個xml 文件是否是獨立的xml 文件

xml格式:

<?xml version="1.0" encoding="UTF-8"?>
<!--這個<?xml 要連在一起寫,否則會有報錯-->
<!-- xml 聲明version 是版本的意思encoding 是編碼-->
<books> <!-- 這是xml 註釋-->
    <book id="SN123123413241"> 
    <!-- book 標籤描述一本圖書id 屬性描述的是圖書的編號-->
        <name>java從入門到放棄</name> 
        <!-- name 標籤描述的是圖書的信息-->
        <author>codwhite</author> 
        <!-- author 單詞是作者的意思,描述圖書作者-->
        <price>999</price>
        <!-- price 單詞是價格,描述的是圖書的價格-->
    </book>
</books>

XML語法規則:

  • XML 開頭聲明
<?xml version="1.0" encoding="UTF-8" ?>
<!-- xml 聲明version 是版本的意思encoding 是編碼-->
  • XML 文檔必須有根元素
<!--必須有一個根元素,可以根據自身要求定義-->
<root>
    <book>
      <name>java從入門到放棄</name>  
    </book>
</root>
  • 所有的 XML 元素都必須有一個關閉標籤
 <name>java從入門到放棄</name>
 <!--</name>就是一個關閉標籤-->
 錯誤寫法:
 <name>java從入門到放棄
  • XML 標籤對大小寫敏感
<Name>java從入門到放棄</name>
<!--不能這樣聲明,否則報錯-->
正確寫法:
<name>java從入門到放棄</name>
  • XML 必須正確嵌套
正確的嵌套:
<book>
      <name>java從入門到放棄</name>
</book>
錯誤的嵌套:
<name>
        <book>java從入門到放棄</name>
</book>
  • XML 屬性值必須加引號

xml 的標籤屬性和html 的標籤屬性是非常類似的,屬性可以提供元素的額外信息在標籤上可以書寫屬性:一個標籤上可以書寫多個屬性。每個屬性的值必須使用引號引起來。

  正確屬性值寫法:
  <book id="SN123123413241">
        <name>java從入門到放棄</name>
  </book>
  錯誤屬性值寫法:
    <book id=SN123123413241>
        <name>java從入門到放棄</name>
    </book>
  • XML 中的註釋
<!--這個就是XML註釋-->
  • 實體引用

在 XML 中,一些字符擁有特殊的意義。

如果您把字符 “<” 放在 XML 元素中,會發生錯誤,這是因爲解析器會把它當作新元素的開始。

這樣會產生 XML 錯誤:

錯誤寫法:
<message>if salary < 1000 then</message>
用實體引用來避免錯誤:(&lt代表<)
<message>if salary &lt; 1000 then</message>

在 XML 中,有 5 個預定義的實體引用:

< < less than
> > greater than
& & ampersand
' apostrophe
" " quotation mark
  • XML標籤名稱不能以數字或者標點符號開始
 錯誤寫法:
<1book id="SN123123413241"/>
  • 名稱不得包含空格
<b ook id="SN123123413241"/>
  • XML中的單標籤與雙標籤
單標籤
格式: <標籤名屬性=”值” 屬性=”值” ...... />
 <book id="SN123123413241"/>
雙標籤
 <book id=SN123123413241></book>
格式:< 標籤名屬性=”值” 屬性=”值” ......>文本數據或子標籤</標籤名>

文本區域(CDATA 區)

CDATA 語法可以告訴xml 解析器,我CDATA 裏的文本內容,只是純文本,不需要xml 語法解析

CDATA 格式:

<![CDATA[ 這裏可以把你輸入的字符原樣顯示,不會解析xml ]]>

Dom4j 解析技術

dom4j 編程步驟:

首先需要dom4j庫:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-gslee4B1-1589436541345)(C:\Users\JUN\AppData\Roaming\Typora\typora-user-images\image-20200514134445620.png)]

第一步: 先加載xml 文件創建Document 對象
第二步: 通過Document 對象拿到根元素對象
第三步: 通過根元素.elelemts(標籤名); 可以返回一個集合,這個集合裏放着。所有你指定的標籤名的元素對象
第四步: 找到你想要修改、刪除的子元素,進行相應在的操作
第五步: 保存到硬盤上

①需要解析的books.xml 文件內容

<?xml version="1.0" encoding="UTF-8"?>
<books>
    <book sn="SN12341232">
        <name>JAVA從入門到放棄</name>
        <price>9.9</price>
        <author>小白</author>
    </book>
    <book sn="SN12341231">
        <name>Mysql從刪庫到跑路</name>
        <price>99.99</price>
        <author>codewhite</author>
    </book>
</books>

②創建javabean(books)

//get,set,構造器,tostring自行添加
public class Book {

    private String sn;
    private String name;
    private Double price;
    private String author;
}

③解析獲取Document 對象的代碼

第一步,先創建SaxReader對象。這個對象,用於讀取xml 文件,並創建Document

/*
* dom4j 獲取Documet 對象
*/
 @Test
    public void testGetDocument() throws DocumentException {
        // 要創建一個Document 對象,需要我們先創建一個SAXReader 對象
        SAXReader reader = new SAXReader();
        // 這個對象用於讀取xml 文件,然後返回一個Document。
        Document document = reader.read("src/books.xml");
        // 打印到控制檯,看看是否創建成功
        System.out.println(document);
    }

④遍歷標籤獲取所有標籤中的內容

需要分四步操作:
第一步,通過創建SAXReader對象。來讀取xml 文件,獲取Document 對象
第二步,通過Document 對象。拿到XML 的根元素對象Element
第三步,通過根元素對象。獲取所有的book 標籤對象
第四步,遍歷每個book 標籤對象。然後獲取到book 標籤對象內的每一個元素,再通過getText() 方法拿到起始標籤和結束標籤之間的文本內容

    /*
     * 讀取xml 文件中的內容
     */
    @Test
    public void readXML() throws DocumentException {
        // 第一步,通過創建SAXReader 對象。來讀取xml 文件,獲取Document 對象
        SAXReader reader = new SAXReader();
        Document document = reader.read("src/books.xml");
        // 第二步,通過Document 對象。拿到XML 的根元素對象
        Element root = document.getRootElement();

        // 第三步,通過根元素對象。獲取所有的book 標籤對象
        // Element.elements(標籤名)它可以拿到當前元素下的指定的子元素的集合
        List<Element> books = root.elements("book");

        // 第四步,遍歷每個book 標籤對象。然後獲取到book 標籤對象內的每一個元素,
        for (Element book : books) {

            // 打印測試
            // Element.asXML() 它將當前所有元素轉換成爲String 對象
//             System.out.println( root.asXML() );

            // 拿到book 下面的name 元素對象
            Element nameElement = book.element("name");
            // 拿到book 下面的price 元素對象
            Element priceElement = book.element("price");
            // 拿到book 下面的author 元素對象
            Element authorElement = book.element("author");
            // 再通過getText() 方法拿到起始標籤和結束標籤之間的文本內容
            System.out.println("書名:" + nameElement.getText() + " , 價格:"
                    + priceElement.getText() + ", 作者:" + authorElement.getText());
        }
    }

結果演示:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-VqJV5JEt-1589436541347)(C:\Users\JUN\AppData\Roaming\Typora\typora-user-images\image-20200514135957025.png)]

案例2:

    @Test
    public void test2() throws Exception {
        //讀取books.xml文件
        SAXReader saxReader = new SAXReader();
        //2.通過Document對象獲得根元素
        Document document = saxReader.read("src/books.xml");
        Element rootElement = document.getRootElement();
        System.out.println(rootElement);
        //3.通過根元素獲取book標籤對象
        //element和lement都是通過標籤名查找子元素
        List<Element> books = rootElement.elements("book");
        for (Element book : books) {

            // Element.asXML() 它將當前所有元素轉換成爲String 對象
//             System.out.println( root.asXML() );

            // Element.element(標籤名)拿到當前元素下子元素
            Element elementName = book.element("name");
            //getText 可以將獲取標籤中的文本內容
            String nameText = elementName.getText();
            System.out.println(nameText);

            
            //或者用elementTest("標籤名")直接獲取標籤名的文本內容
            String priceText = book.elementText("price");
            String authorText = book.elementText("author");
            String snValue = book.attributeValue("sn");
            System.out.println(new Book(snValue, nameText, Double.parseDouble(priceText), authorText));

        }
    }

結果演示:
在這裏插入圖片描述

寫在後邊:

本文學習資料來源於:百度百科,菜鳥教程,尚硅谷教程等。
如果有問題可以聯繫我。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章