為什麼需要文本格式?

文本格式便於存儲信息,因為它們可以由程序和人類創建和處理。

文本文件(文本格式的文件)可以在各種文本編輯器中打開、閱讀和編輯。

許多程序使用基於文本的配置文件,即使格式包含數字和二進制(是/否)值。

由於需要從文本格式轉換為內部格式,反之亦然,這使得程序稍微複雜一些,但它可以在不使用程序本身的配置工具的情況下手動編輯配置。

現在在哪裡使用 XML?

XML 用於 IT 的各個領域。它可以是配置文件(帶有程序設置)或用於在程序之間傳輸數據的文件。在 Java 中,最常見的用例之一是配置 Maven,一種構建自動化工具。

XML 文檔的結構

XML 文檔的物理和邏輯結構是分開的。就物理結構而言,文檔由可以引用其他實體的實體組成。

唯一的根元素是文檔實體。實體是文檔中最小的部分。所有實體都有一個名稱並包含字符。

反過來,字符屬於兩個類別之一:字符數據或標記。

標記包括:

  • 標記,表示元素邊界;
  • 聲明和處理指令,包括它們的屬性;
  • 實體引用;
  • 評論;
  • 字符序列包裝 CDATA 部分。

從邏輯上講,文檔由元素、註釋、聲明、實體引用和處理指令組成。標記用於在文檔中創建所有這些結構。

文檔的所有組成部分都分為序言和根元素。根元素是 XML 文檔的強制性基本部分,而序言可能根本不存在。根元素可以由嵌套元素、字符數據和註釋組成。文檔的元素必須正確嵌套:任何在另一個元素內開始的元素也必須在該元素內結束。

標記符號

標記總是以<開頭並以>結尾。

<和>(尖括號)和& (與)符號起著特殊的作用。尖括號表示元素、處理指令和一些其他序列的邊界。符號幫助我們用實體替換文本。

聲明

XML 聲明指定用於編寫文檔的語言版本。XML 規範要求以 XML 聲明開始文檔,因為文檔內容的正確解釋取決於語言的版本。

在該語言的第一個版本 (1.0) 中,此聲明是可選的,但在以後的版本中是強制性的。假定缺少聲明表示版本 1.0。聲明還可能包含有關文檔編碼的信息。

例子:

<?XML version="1.1" encoding="UTF-8" ?>

標籤

標籤是包含元素名稱的標記結構。有開始標籤和結束標籤。還有結合開始和結束元素的空元素標籤。

例子:

  • 開始標籤:<tag1>

  • 結束標籤:</tag1>

  • 空元素標籤:<empty_tag1 />

屬性

XML 元素的另一部分是屬性。一個元素可以有多個唯一的屬性。屬性讓我們指定有關元素的更多信息。或者更準確地說,屬性定義了元素的特性。

屬性始終是名稱-值對:

名稱 = "值"

標籤中的屬性示例:

<tag1 name = "value">元素</tag1>

屬性的值必須用雙引號 ( " ) 或單引號 ( ' ) 括起來。屬性僅用於開始標記和空元素標記。

轉義五個特殊字符(<、>、'、"、&)

顯然,不能在字符數據和屬性值中使用<>&符號。您需要特殊的轉義序列來表示它們。在屬性值中寫入撇號和引號時也使用特殊序列:

象徵 替代品
< <
> >
& &
'

此外,要編寫\字符,您需要使用\\

CDATA 部分

CDATA 部分不是文本的邏輯單元。這種類型的部分可以出現在 XML 語法允許我們在文檔中放置字符數據的地方。

該部分以<![CDATA[開始並以]]>結束。字符數據放置在這些標記位之間,並且可以直接使用<>&符號。

評論

註釋不被視為字符數據。註釋以<!--開頭,以-->結尾。字符序列--不能在註釋中使用。此外,在註釋中,與號字符不表示標記。

例子:

<!-- 這是評論 -->

名稱

在 XML 中,所有名稱只能包含 Unicode 字符表中的字母、阿拉伯數字、句點、冒號、連字符和下劃線。名稱可以以字母、冒號或下劃線開頭。請注意,名稱不能以字符串XML開頭。

例子

讓我們看一下 Java 類和該類的對象。然後我們將嘗試序列化 XML 格式的對象。班級代碼:


public class Book {
   private String title;
   private String author;
   private Integer pageCount;
   private List<String> chapters;

   public Book(String title, String author, Integer pageCount, List<String> chapters) {
       this.title = title;
       this.author = author;
       this.pageCount = pageCount;
       this.chapters = chapters;
   }
// Getters/setters
}

和創建對象:


Book book = new Book("My Favorite Book", "Amigo", 999, Arrays.asList("Chapter 1", "Chapter 2", "Chapter 3", "Chapter 4", "Chapter 5", "Chapter 6"));

下面是一個包含 4 個字段的 Java 對象的有效 XML 表示的示例,其中一個是一個集合(參見上面的 Java 代碼):

<Book>
  <title>我最喜歡的書</title>
  <author>Amigo</author>
  <pageCount>999</pageCount>
 <chapters>
    <chapters>第一章</chapters>
    <chapters>第二章</chapters>
    <chapters>第3章</chapters>
    <chapters>第4章</chapters>
    <chapters>第5章</chapters>
    <chapters>第6章</chapters>
 </chapters>
</Book>

XML模式

XML 模式是對 XML 文檔結構的描述。相應的規範(XML Schema Definition,或 XSD)是 W3C 的推薦標準。

XSD 旨在表達 XML 文檔必須遵循的規則。但對我們來說最有趣的是 XSD 被設計用於開發處理 XML 文檔的軟件。它讓我們以編程方式檢查 XML 文檔的正確性。

包含 XML 架構的文件具有 .xsd 擴展名。設計 XML 模式超出了本課的範圍,所以現在只需要知道這種可能性是存在的。