
- XML 教程
- XML - 首頁
- XML - 概述
- XML - 語法
- XML - 文件
- XML - 宣告
- XML - 標籤
- XML - 元素
- XML - 屬性
- XML - 註釋
- XML - 字元實體
- XML - CDATA 節
- XML - 空格
- XML - 處理
- XML - 編碼
- XML - 驗證
- XML 有用資源
- XML 快速指南
- XML - 有用資源
XML 快速指南
XML - 概述
XML 代表可擴充套件標記語言 (Extensible Markup Language)。它是一種基於文字的標記語言,源自標準通用標記語言 (SGML)。
XML 標籤標識資料,用於儲存和組織資料,而不是像 HTML 標籤那樣指定如何顯示資料(HTML 標籤用於顯示資料)。XML 在不久的將來不會取代 HTML,但它透過採用 HTML 的許多成功特性引入了新的可能性。
XML 有三個重要的特性使其在各種系統和解決方案中都非常有用:
XML 是可擴充套件的 - XML 允許您建立適合您應用程式的自己的自描述標籤或語言。
XML 傳輸資料,不呈現資料 - XML 允許您儲存資料,而不管它將如何呈現。
XML 是公共標準 - XML 由全球資訊網聯盟 (W3C) 開發,是一個開放標準。
XML 用途
XML 用途簡要列表如下:
XML 可以幕後工作,簡化大型網站 HTML 文件的建立。
XML 可用於在組織和系統之間交換資訊。
XML 可用於資料庫的解除安裝和重新載入。
XML 可用於儲存和組織資料,可以定製您的資料處理需求。
XML 可以輕鬆與樣式表合併,以建立幾乎任何所需的輸出。
實際上,任何型別的資料都可以表示為 XML 文件。
什麼是標記?
XML 是一種標記語言,它定義了一組規則,用於以既可人讀又可機器讀的格式編碼文件。那麼什麼是標記語言呢?標記是新增到文件中的資訊,它以某種方式增強了文件的含義,因為它標識了文件的各個部分以及它們之間的關係。更具體地說,標記語言是一組符號,可以放置在文件的文字中以劃分和標記該文件的各個部分。
以下示例顯示了嵌入在文字中的 XML 標記的外觀:
<message> <text>Hello, world!</text> </message>
此程式碼片段包含標記符號或標籤,例如 <message>...</message> 和 <text>... </text>。標籤 <message> 和 </message> 標記 XML 程式碼片段的開始和結束。標籤 <text> 和 </text> 包含文字 Hello, world!。
XML 是一種程式語言嗎?
程式語言由語法規則和自己的詞彙表組成,用於建立計算機程式。這些程式指示計算機執行特定任務。XML 不符合程式語言的資格,因為它不執行任何計算或演算法。它通常儲存在簡單的文字檔案中,並由能夠解釋 XML 的專用軟體處理。
XML - 語法
在本節中,我們將討論編寫 XML 文件的簡單語法規則。以下是完整的 XML 文件:
<?xml version = "1.0"?> <contact-info> <name>Tanmay Patil</name> <company>TutorialsPoint</company> <phone>(011) 123-4567</phone> </contact-info>
您會注意到上面的示例中有兩種資訊:
標記,如 <contact-info>
文字或字元資料,Tutorials Point 和 (040) 123-4567。
下圖描述了在 XML 文件中編寫不同型別標記和文字的語法規則。

讓我們詳細瞭解上圖的每個元件。
XML 宣告
XML 文件可以選擇包含 XML 宣告。它寫成如下:
<?xml version = "1.0" encoding = "UTF-8"?>
其中version 是 XML 版本,encoding 指定文件中使用的字元編碼。
XML 宣告的語法規則
XML 宣告區分大小寫,必須以“<?xml>”開頭,其中“xml”小寫。
如果文件包含 XML 宣告,則它必須嚴格作為 XML 文件的第一個語句。
XML 宣告必須嚴格作為 XML 文件中的第一個語句。
HTTP 協議可以覆蓋您在 XML 宣告中設定的encoding 值。
標籤和元素
XML 檔案由多個 XML 元素構成,也稱為 XML 節點或 XML 標籤。XML 元素的名稱用三角括號 < > 括起來,如下所示:
<element>
標籤和元素的語法規則
元素語法 - 每個 XML 元素都需要用開始元素或結束元素關閉,如下所示:
<element>....</element>
或者在簡單情況下,只需這樣:
<element/>
元素巢狀 - XML 元素可以包含多個 XML 元素作為其子元素,但子元素不能重疊。即,元素的結束標籤必須與最近的不匹配的開始標籤具有相同的名稱。
以下示例顯示了巢狀標籤不正確:
<?xml version = "1.0"?> <contact-info> <company>TutorialsPoint </contact-info> </company>
以下示例顯示了巢狀標籤正確:
<?xml version = "1.0"?> <contact-info> <company>TutorialsPoint</company> <contact-info>
根元素 - XML 文件只能有一個根元素。例如,以下不是正確的 XML 文件,因為x 和y 元素都出現在頂級,沒有根元素:
<x>...</x> <y>...</y>
以下示例顯示了一個格式正確的 XML 文件:
<root> <x>...</x> <y>...</y> </root>
大小寫敏感性 - XML 元素的名稱區分大小寫。這意味著開始元素和結束元素的名稱必須完全相同。
例如,<contact-info> 與 <Contact-Info> 不同
XML 屬性
屬性使用名稱/值對指定元素的單個屬性。XML 元素可以有一個或多個屬性。例如:
<a href = "https://tutorialspoint.tw/">Tutorialspoint!</a>
這裡href 是屬性名稱,https://tutorialspoint.tw/ 是屬性值。
XML 屬性的語法規則
XML 中的屬性名稱(與 HTML 不同)區分大小寫。也就是說,HREF 和 href 被認為是兩個不同的 XML 屬性。
同一屬性在一個語法中不能有兩個值。以下示例顯示了不正確的語法,因為屬性b 被指定了兩次
—
<a b = "x" c = "y" b = "z">....</a>
屬性名稱無需用引號定義,而屬性值必須始終用引號括起來。以下示例演示了不正確的 xml 語法
—
<a b = x>....</a>
在上例語法中,屬性值沒有用引號定義。
XML 引用
引用通常允許您在 XML 文件中新增或包含其他文字或標記。引用始終以符號"&"(這是一個保留字元)開頭,並以符號";" 結尾。XML 有兩種型別的引用:
實體引用 - 實體引用包含開始和結束分隔符之間的名稱。例如&,其中amp 是name。name 指的是預定義的文字和/或標記字串。
字元引用 - 這些包含引用,例如A,包含一個井號 (“#”),後跟一個數字。該數字始終指字元的 Unicode 程式碼。在這種情況下,65 指字母“A”。
XML 文字
XML 元素和 XML 屬性的名稱區分大小寫,這意味著開始元素和結束元素的名稱需要使用相同的大小寫。為了避免字元編碼問題,所有 XML 檔案都應儲存為 Unicode UTF-8 或 UTF-16 檔案。
XML 元素之間和 XML 屬性之間的空格字元(如空格、製表符和換行符)將被忽略。
某些字元被 XML 語法本身保留。因此,不能直接使用它們。要使用它們,可以使用一些替代實體,如下所示:
不允許使用的字元 | 替代實體 | 字元描述 |
---|---|---|
< | < | 小於 |
> | > | 大於 |
& | & | 和號 |
' | ' | 撇號 |
" | " | 引號 |
XML - 文件
XML 文件是由元素和其他標記組成的有序包中的 XML 資訊的基本單元。XML 文件可以包含各種各樣的資料。例如,數字資料庫、表示分子結構的數字或數學方程式。
XML 文件示例
以下示例顯示了一個簡單的文件:
<?xml version = "1.0"?> <contact-info> <name>Tanmay Patil</name> <company>TutorialsPoint</company> <phone>(011) 123-4567</phone> </contact-info>
下圖描述了 XML 文件的各個部分。

文件序言部分
文件序言位於文件的頂部,位於根元素之前。本節包含:
- XML 宣告
- 文件型別宣告
您可以在本章中瞭解有關 XML 宣告的更多資訊:XML 宣告
文件元素部分
文件元素是 XML 的構建塊。它們將文件劃分為一個層次結構的部分,每個部分都具有特定的用途。您可以將文件分成多個部分,以便可以以不同的方式呈現它們,或被搜尋引擎使用。元素可以是容器,包含文字和其他元素的組合。
您可以在本章中瞭解有關 XML 元素的更多資訊:XML 元素
XML - 宣告
本章詳細介紹了 XML 宣告。XML 宣告包含準備 XML 處理器解析 XML 文件的詳細資訊。它是可選的,但如果使用,則必須出現在 XML 文件的第一行。
語法
以下語法顯示 XML 宣告:
<?xml version = "version_number" encoding = "encoding_declaration" standalone = "standalone_status" ?>
每個引數都包含一個引數名稱、一個等號 (=) 和一個帶引號的引數值。下表詳細顯示了上述語法:
引數 | 引數值 | 引數描述 |
---|---|---|
版本 | 1.0 | 指定使用的 XML 標準版本。 |
編碼 | UTF-8、UTF-16、ISO-10646-UCS-2、ISO-10646-UCS-4、ISO-8859-1 到 ISO-8859-9、ISO-2022-JP、Shift_JIS、EUC-JP | 它定義文件中使用的字元編碼。UTF-8 是使用的預設編碼。 |
獨立 | yes 或 no | 它通知解析器文件是否依賴於外部源(例如外部文件型別定義 (DTD))的資訊來獲取其內容。預設值為no。將其設定為yes 將告訴處理器解析文件不需要任何外部宣告。 |
規則
XML 宣告應遵守以下規則:
如果 XML 中存在 XML 宣告,則必須將其放置在 XML 文件的第一行。
如果包含 XML 宣告,則必須包含版本號屬性。
引數名稱和值區分大小寫。
名稱始終小寫。
引數放置的順序很重要。正確的順序是:version、encoding 和 standalone。
可以使用單引號或雙引號。
XML 宣告沒有結束標籤,即</?xml>
XML 宣告示例
以下是 XML 宣告的一些示例:
沒有引數的 XML 宣告:
<?xml >
帶有版本定義的 XML 宣告:
<?xml version = "1.0">
定義了所有引數的 XML 宣告:
<?xml version = "1.0" encoding = "UTF-8" standalone = "no" ?>
使用單引號定義所有引數的XML宣告 -
<?xml version = '1.0' encoding = 'iso-8859-1' standalone = 'no' ?>
XML - 標籤
讓我們學習XML最重要的部分之一:XML標籤。XML標籤構成了XML的基礎。它們定義了XML中元素的範圍。它們還可以用於插入註釋,宣告解析環境所需的設定以及插入特殊指令。
我們可以將XML標籤大致分為以下幾類:
開始標籤
每個非空XML元素的開頭都用開始標籤標記。以下是開始標籤的示例:
<address>
結束標籤
每個具有開始標籤的元素都應該以結束標籤結尾。以下是結束標籤的示例:
</address>
請注意,結束標籤在元素名稱之前包含一個斜槓("/")。
空標籤
出現在開始標籤和結束標籤之間的文字稱為內容。沒有內容的元素稱為空元素。空元素可以用以下兩種方式表示:
開始標籤緊跟結束標籤,如下所示:
<hr></hr>
完整的空元素標籤如下所示:
<hr />
空元素標籤可以用於任何沒有內容的元素。
XML標籤規則
以下是使用XML標籤時需要遵循的規則:
規則1
XML標籤區分大小寫。以下程式碼行是錯誤語法`
`的示例,因為兩個標籤的大小寫不同,這在XML中被視為錯誤語法。<address>This is wrong syntax</Address>
以下程式碼顯示了正確的方法,我們使用相同的大小寫來命名開始和結束標籤。
<address>This is correct syntax</address>
規則2
必須按正確的順序關閉XML標籤,即,在另一個元素內部開啟的XML標籤必須在外部元素關閉之前關閉。例如:
<outer_element> <internal_element> This tag is closed before the outer_element </internal_element> </outer_element>
XML - 元素
XML元素可以定義為XML的構建塊。元素可以作為容器來容納文字、元素、屬性、媒體物件或所有這些。
每個XML文件包含一個或多個元素,其範圍由開始和結束標籤分隔,或者對於空元素,由空元素標籤分隔。
語法
以下是編寫XML元素的語法:
<element-name attribute1 attribute2> ....content </element-name>
其中:
element-name是元素的名稱。其名稱在開始和結束標籤中的大小寫必須匹配。
attribute1, attribute2是元素的屬性,用空格分隔。屬性定義了元素的屬性。它將名稱與值相關聯,值是字元字串。屬性的寫法如下:
name = "value"
name後跟一個=號和一個用雙引號(" ")或單引號(' ')括起來的字串value。
空元素
空元素(沒有內容的元素)具有以下語法:
<name attribute1 attribute2.../>
以下是用各種XML元素編寫的XML文件示例:
<?xml version = "1.0"?> <contact-info> <address category = "residence"> <name>Tanmay Patil</name> <company>TutorialsPoint</company> <phone>(011) 123-4567</phone> </address> </contact-info>
XML元素規則
XML元素需要遵循以下規則:
元素名稱可以包含任何字母數字字元。名稱中唯一允許的標點符號是連字元 (-)、下劃線 (_) 和句點 (.)。
名稱區分大小寫。例如,Address、address和ADDRESS是不同的名稱。
元素的開始和結束標籤必須相同。
元素作為容器,可以包含文字或元素,如上例所示。
XML - 屬性
本章描述了XML屬性。屬性是XML元素的一部分。一個元素可以有多個唯一的屬性。屬性提供了關於XML元素的更多資訊。更準確地說,它們定義了元素的屬性。XML屬性始終是名稱-值對。
語法
XML屬性具有以下語法:
<element-name attribute1 attribute2 > ....content.. < /element-name>
其中attribute1和attribute2具有以下形式:
name = "value"
value必須用雙引號(" ")或單引號(' ')括起來。這裡,attribute1和attribute2是唯一的屬性標籤。
屬性用於為元素新增唯一的標籤,將標籤放在類別中,添加布爾標誌,或將其與某些資料字串關聯。以下示例演示了屬性的使用:
<?xml version = "1.0" encoding = "UTF-8"?> <!DOCTYPE garden [ <!ELEMENT garden (plants)*> <!ELEMENT plants (#PCDATA)> <!ATTLIST plants category CDATA #REQUIRED> ]> <garden> <plants category = "flowers" /> <plants category = "shrubs"> </plants> </garden>
當您不想為每種情況建立一個新元素時,屬性用於區分同名元素。因此,使用屬性可以更詳細地區分兩個或多個相似的元素。
在上例中,我們透過包含屬性category併為每個元素分配不同的值來對植物進行分類。因此,我們有兩個類別plants,一個flowers,另一個shrubs。因此,我們有兩個具有不同屬性的plant元素。
您還可以觀察到,我們在XML開頭聲明瞭此屬性。
屬性型別
下表列出了屬性型別:
屬性型別 | 描述 |
---|---|
StringType | 它接受任何文字字串作為值。CDATA是StringType。CDATA是字元資料。這意味著,任何非標記字元的字串都是屬性的合法部分。 |
TokenizedType | 這是一個更受限制的型別。在屬性值被規範化後,將應用語法中提到的有效性約束。TokenizedType屬性如下:
|
EnumeratedType | 在其宣告中有一組預定義的值。從中,它必須分配一個值。有兩種列舉屬性:
|
元素屬性規則
以下是屬性需要遵循的規則:
屬性名稱在同一個開始標籤或空元素標籤中不能出現多次。
必須使用屬性列表宣告在文件型別定義 (DTD) 中宣告屬性。
屬性值不能包含對外部實體的直接或間接實體引用。
屬性值中直接或間接引用的任何實體的替換文字不能包含小於號 (<)
XML - 註釋
本章解釋了XML註釋在XML文件中的工作原理。XML註釋類似於HTML註釋。註釋作為筆記或行新增,以瞭解XML程式碼的目的。
註釋可用於包含相關連結、資訊和術語。它們僅在原始碼中可見;不在XML程式碼中。註釋可以出現在XML程式碼中的任何位置。
語法
XML註釋具有以下語法:
<!--Your comment-->
註釋以<!--開頭,以-->結尾。您可以在字元之間新增文字註釋作為註釋。您不能將一個註釋巢狀在另一個註釋內。
示例
以下示例演示了在XML文件中使用註釋:
<?xml version = "1.0" encoding = "UTF-8" ?> <!--Students grades are uploaded by months--> <class_list> <student> <name>Tanmay</name> <grade>A</grade> </student> </class_list>
<!--和-->字元之間的任何文字都被視為註釋。
XML註釋規則
XML註釋應遵循以下規則:
- 註釋不能出現在XML宣告之前。
- 註釋可以出現在文件中的任何位置。
- 註釋不能出現在屬性值中。
- 註釋不能巢狀在其他註釋內。
XML - 字元實體
本章描述了XML字元實體。在瞭解字元實體之前,讓我們首先了解什麼是XML實體。
正如W3 Consortium所述,實體的定義如下:
“文件實體作為實體樹的根和XML處理器的起點”。
這意味著,實體是XML中的佔位符。這些可以在文件序言或DTD中宣告。有不同型別的實體,本章將討論字元實體。
HTML和XML都有一些保留用於其自身的符號,這些符號不能用作XML程式碼中的內容。例如,<和>符號用於開啟和關閉XML標籤。要顯示這些特殊字元,可以使用字元實體。
有一些特殊字元或符號無法直接從鍵盤輸入。字元實體也可以用於顯示這些符號/特殊字元。
字元實體型別
有三種類型的字元實體:
- 預定義字元實體
- 編號字元實體
- 命名字元實體
預定義字元實體
引入它們是為了避免使用某些符號時出現的歧義。例如,當小於 (<) 或大於 (>) 符號與角標籤 (<>) 一起使用時,會觀察到歧義。字元實體基本上用於分隔XML中的標籤。以下是XML規範中預定義字元實體的列表。這些可以用來表達字元而不會產生歧義。
與號 - &
單引號 - '
大於 - >
小於 - <
雙引號 - "
數字字元實體
數字引用用於引用字元實體。數字引用可以是十進位制或十六進位制格式。由於有數千個可用的數字引用,這些引用有點難以記住。數字引用透過其在Unicode字元集中的編號來引用字元。
十進位制數字引用的通用語法為:
&# decimal number ;
十六進位制數字引用的通用語法為:
&#x Hexadecimal number ;
下表列出了一些預定義的字元實體及其數值:
實體名稱 | 字元 | 十進位制引用 | 十六進位制引用 |
---|---|---|---|
quot | " | " | " |
amp | & | & | & |
apos | ' | ' | ' |
lt | < | < | < |
gt | > | > | > |
命名字元實體
由於難以記住數字字元,因此最常用的字元實體型別是命名字元實體。在這裡,每個實體都用一個名稱標識。
例如:
'Aacute' 代表帶有重音符的大寫
字元。
'ugrave' 代表帶有重音符的小寫
。
XML - CDATA 節
本章將討論XML CDATA 部分。CDATA表示字元資料。CDATA定義為不被解析器解析的文字塊,但會被識別為標記。
預定義實體,如<、>和&,需要輸入,並且通常難以在標記中閱讀。在這種情況下,可以使用CDATA部分。透過使用CDATA部分,您可以命令解析器文件的特定部分不包含標記,應將其視為常規文字。
語法
以下是CDATA部分的語法:
<![CDATA[ characters with markup ]]>
上述語法由三個部分組成:
CDATA 開始部分 - CDATA 以九個字元的分隔符<![CDATA[開頭
CDATA 結束部分 - CDATA 部分以]]>分隔符結尾。
CDATA 部分 - 這兩個括號之間的字元被解釋為字元,而不是標記。此部分可能包含標記字元 (<、> 和 &),但XML處理器會忽略它們。
示例
以下標記程式碼顯示了CDATA的示例。這裡,CDATA部分中編寫的每個字元都被解析器忽略。
<script> <![CDATA[ <message> Welcome to TutorialsPoint </message> ]] > </script >
在上文的語法中,`
CDATA 規則
對於 XML CDATA,必須遵循以下規則:
- CDATA 在 XML 文件中的任何位置都不能包含字串“]]>”。
- CDATA 區段不允許巢狀。
XML - 空格
本章將討論 XML 文件中的空格處理。空格是空格、製表符和換行符的集合。它們通常用於使文件更易於閱讀。
XML 文件包含兩種型別的空格——有效空格和無效空格。下面將透過示例對兩者進行解釋。
有效空格
有效空格出現在包含文字和標記同時存在的元素中。例如:
<name>TanmayPatil</name>
和
<name>Tanmay Patil</name>
由於Tanmay 和 Patil 之間的空格,以上兩個元素有所不同。讀取 XML 檔案中此元素的任何程式都必須保持這種區別。
無效空格
無效空格是指只允許元素內容的空格。例如:
<address.category = "residence">或
<address....category = "..residence">
以上示例相同。此處,空格由點 (.) 表示。在上例中,`address` 和 `category` 之間的空格是無效的。
可以為元素附加一個名為xml:space 的特殊屬性。這表示應用程式不應刪除該元素的空格。可以將此屬性設定為default 或preserve,如下例所示:
<!ATTLIST address xml:space (default|preserve) 'preserve'>
其中:
值default 表示應用程式的預設空格處理模式對於此元素是可以接受的。
值preserve 表示應用程式應保留所有空格。
XML - 處理
本章介紹處理指令 (PI)。根據 XML 1.0 建議的定義:
“處理指令 (PI) 允許文件包含應用程式的指令。PI 不是文件字元資料的一部分,但必須傳遞給應用程式。”
處理指令 (PI) 可用於將資訊傳遞給應用程式。PI 可以出現在文件中標記之外的任何位置。它們可以出現在序言中(包括文件型別定義 (DTD))、文字內容中或文件之後。
語法
以下是 PI 的語法:
<?target instructions?>
其中
target - 指明指令的目標應用程式。
instruction - 描述應用程式要處理的資訊的字元。
PI 以特殊標記<? 開頭,以?> 結尾。字串?> 出現後,內容處理立即結束。
示例
PI 很少使用。它們主要用於將 XML 文件連結到樣式表。以下是一個示例:
<?xml-stylesheet href = "tutorialspointstyle.css" type = "text/css"?>
此處,target 為xml-stylesheet。href="tutorialspointstyle.css" 和 type="text/css" 是data 或instructions,目標應用程式將在處理給定的 XML 文件時使用這些資料或指令。
在這種情況下,瀏覽器透過指示應在顯示之前轉換 XML 來識別目標;第一個屬性宣告轉換的型別為 XSL,第二個屬性指向其位置。
處理指令規則
PI 可以包含任何資料,但?> 組合除外,該組合被解釋為結束分隔符。以下是兩個有效 PI 的示例:
<?welcome to pg = 10 of tutorials point?> <?welcome?>
XML - 編碼
編碼是將 Unicode 字元轉換為其等效二進位制表示的過程。當 XML 處理器讀取 XML 文件時,它會根據編碼型別對文件進行編碼。因此,我們需要在 XML 宣告中指定編碼型別。
編碼型別
主要有兩種編碼型別:
- UTF-8
- UTF-16
UTF 代表UCS 變換格式,UCS 本身代表通用字元集。8 或 16 指的是表示字元所用的位數。它們是 8 位(1 到 4 個位元組)或 16 位(2 或 4 個位元組)。對於沒有編碼資訊的文件,預設情況下設定為 UTF-8。
語法
編碼型別包含在 XML 文件的序言部分中。UTF-8 編碼的語法如下:
<?xml version = "1.0" encoding = "UTF-8" standalone = "no" ?>
UTF-16 編碼的語法如下:
<?xml version = "1.0" encoding = "UTF-16" standalone = "no" ?>
示例
以下示例顯示了編碼的宣告:
<?xml version = "1.0" encoding = "UTF-8" standalone = "no" ?> <contact-info> <name>Tanmay Patil</name> <company>TutorialsPoint</company> <phone>(011) 123-4567</phone> </contact-info>
在上例中,encoding="UTF-8" 指定使用 8 位來表示字元。要表示 16 位字元,可以使用UTF-16 編碼。
使用 UTF-8 編碼的 XML 檔案的大小往往小於使用 UTF-16 格式編碼的檔案。
XML - 驗證
驗證是一個驗證 XML 文件的過程。如果 XML 文件的內容與元素、屬性和相關的文件型別宣告 (DTD) 匹配,並且文件符合其中表達的約束,則該文件被稱為有效。XML 解析器透過兩種方式處理驗證。它們是:
- 格式良好的 XML 文件
- 有效的 XML 文件
格式良好的 XML 文件
如果 XML 文件符合以下規則,則稱其為格式良好:
非 DTD XML 檔案必須使用預定義的字元實體來表示amp(&)、apos(單引號)、gt(>)、lt(<)、quot(雙引號)。
它必須遵循標記的順序,即必須在關閉外部標記之前關閉內部標記。
它的每個開始標記都必須有一個結束標記,或者它必須是一個自結束標記。(`
`....` - 技術教學 ` 或 ``)。 它在一個開始標記中只能有一個屬性,該屬性需要用引號括起來。
必須宣告除amp(&)、apos(單引號)、gt(>)、lt(<)、quot(雙引號) 以外的其他實體。
示例
以下是一個格式良好的 XML 文件示例:
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?> <!DOCTYPE address [ <!ELEMENT address (name,company,phone)> <!ELEMENT name (#PCDATA)> <!ELEMENT company (#PCDATA)> <!ELEMENT phone (#PCDATA)> ]> <address> <name>Tanmay Patil</name> <company>TutorialsPoint</company> <phone>(011) 123-4567</phone> </address>
以上示例被稱為格式良好,因為:
它定義了文件的型別。此處,文件型別為element 型別。
它包含一個名為address 的根元素。
name、company 和 phone 之間的每個子元素都包含在其自解釋標記中。
保持標記的順序。
有效的 XML 文件
如果 XML 文件格式良好且具有關聯的文件型別宣告 (DTD),則稱其為有效的 XML 文件。我們將在章節XML - DTDs中詳細學習 DTD。
XML - DTDs
XML 文件型別宣告,通常稱為 DTD,是一種精確描述 XML 語言的方法。DTD 根據相應 XML 語言的語法規則檢查 XML 文件的詞彙和結構的有效性。
XML DTD 可以指定在文件內,也可以儲存在單獨的文件中,然後單獨連結。
語法
DTD 的基本語法如下:
<!DOCTYPE element DTD identifier [ declaration1 declaration2 ........ ]>
在上文的語法中:
DTD 以`
element 告訴解析器從指定的根元素解析文件。
DTD 識別符號是文件型別定義的識別符號,它可能是系統上檔案的路徑或網際網路上檔案的 URL。如果 DTD 指向外部路徑,則稱為外部子集。
方括號 [ ] 包含一個可選的實體宣告列表,稱為內部子集。
內部 DTD
如果在 XML 檔案中宣告元素,則 DTD 稱為內部 DTD。要將其稱為內部 DTD,XML 宣告中的`standalone` 屬性必須設定為yes。這意味著宣告獨立於外部源工作。
語法
以下是內部 DTD 的語法:
<!DOCTYPE root-element [element-declarations]>
其中root-element 是根元素的名稱,element-declarations 是宣告元素的地方。
示例
以下是一個內部 DTD 的簡單示例:
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?> <!DOCTYPE address [ <!ELEMENT address (name,company,phone)> <!ELEMENT name (#PCDATA)> <!ELEMENT company (#PCDATA)> <!ELEMENT phone (#PCDATA)> ]> <address> <name>Tanmay Patil</name> <company>TutorialsPoint</company> <phone>(011) 123-4567</phone> </address>
讓我們來看一下上面的程式碼:
開始宣告- 使用以下語句開始 XML 宣告。
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?>
DTD - 在 XML 頭之後,緊跟著文件型別宣告,通常稱為 DOCTYPE -
<!DOCTYPE address [
DOCTYPE 宣告的元素名稱開頭有一個感嘆號 (!) 。DOCTYPE 通知解析器此 XML 文件與 DTD 相關聯。
DTD 主體 - DOCTYPE 宣告之後是 DTD 的主體,您可以在其中宣告元素、屬性、實體和符號。
<!ELEMENT address (name,company,phone)> <!ELEMENT name (#PCDATA)> <!ELEMENT company (#PCDATA)> <!ELEMENT phone_no (#PCDATA)>
此處聲明瞭幾個構成`
結束宣告 - 最後,使用右括號和右尖括號 (]>) 關閉 DTD 的宣告部分。這有效地結束了定義,此後,XML 文件緊隨其後。
規則
文件型別宣告必須出現在文件的開頭(僅在 XML 頭之前)——不允許出現在文件中的其他任何位置。
與 DOCTYPE 宣告類似,元素宣告必須以感嘆號開頭。
文件型別宣告中的名稱必須與根元素的元素型別匹配。
外部 DTD
在外部 DTD 中,元素在 XML 檔案之外宣告。透過指定系統屬性來訪問它們,系統屬性可以是合法的.dtd 檔案或有效的 URL。要將其稱為外部 DTD,XML 宣告中的`standalone` 屬性必須設定為no。這意味著宣告包含來自外部源的資訊。
語法
以下是外部 DTD 的語法:
<!DOCTYPE root-element SYSTEM "file-name">
其中file-name 是具有.dtd 副檔名的檔案。
示例
以下示例顯示了外部 DTD 的用法:
<?xml version = "1.0" encoding = "UTF-8" standalone = "no" ?> <!DOCTYPE address SYSTEM "address.dtd"> <address> <name>Tanmay Patil</name> <company>TutorialsPoint</company> <phone>(011) 123-4567</phone> </address>
DTD 檔案address.dtd 的內容如下所示:
<!ELEMENT address (name,company,phone)> <!ELEMENT name (#PCDATA)> <!ELEMENT company (#PCDATA)> <!ELEMENT phone (#PCDATA)>
型別
您可以使用系統識別符號或公共識別符號引用外部 DTD。
系統識別符號
系統識別符號使您可以指定包含 DTD 宣告的外部檔案的位置。語法如下:
<!DOCTYPE name SYSTEM "address.dtd" [...]>
如您所見,它包含關鍵字 SYSTEM 和指向文件位置的 URI 引用。
公共識別符號
公共識別符號提供了一種查詢 DTD 資源的機制,其寫法如下:
<!DOCTYPE name PUBLIC "-//Beginning XML//DTD Address Example//EN">
如你所見,它以關鍵字 PUBLIC 開頭,後面跟著一個特殊的識別符號。公共識別符號用於識別目錄中的條目。公共識別符號可以遵循任何格式,但是,一種常用的格式稱為正式公共識別符號 (Formal Public Identifiers, 或 FPI)。
XML - 模式
XML Schema 通常被稱為XML 模式定義 (XML Schema Definition, XSD)。它用於描述和驗證 XML 資料的結構和內容。XML 模式定義元素、屬性和資料型別。模式元素支援名稱空間。它類似於描述資料庫中資料的資料庫模式。
語法
您需要在 XML 文件中宣告一個模式,如下所示:
示例
以下示例顯示瞭如何使用模式:
<?xml version = "1.0" encoding = "UTF-8"?> <xs:schema xmlns:xs = "http://www.w3.org/2001/XMLSchema"> <xs:element name = "contact"> <xs:complexType> <xs:sequence> <xs:element name = "name" type = "xs:string" /> <xs:element name = "company" type = "xs:string" /> <xs:element name = "phone" type = "xs:int" /> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
XML 模式背後的基本思想是它們描述了 XML 文件可以採用的合法格式。
元素
正如我們在XML - 元素章節中看到的,元素是 XML 文件的構建塊。元素可以在 XSD 中定義如下:
<xs:element name = "x" type = "y"/>
定義型別
您可以透過以下方式定義 XML 模式元素:
簡單型別
簡單型別元素僅在文字上下文中使用。一些預定義的簡單型別包括:xs:integer、xs:boolean、xs:string、xs:date。例如:
<xs:element name = "phone_number" type = "xs:int" />
複雜型別
複雜型別是其他元素定義的容器。這允許您指定元素可以包含哪些子元素,並在 XML 文件中提供一些結構。例如:
<xs:element name = "Address"> <xs:complexType> <xs:sequence> <xs:element name = "name" type = "xs:string" /> <xs:element name = "company" type = "xs:string" /> <xs:element name = "phone" type = "xs:int" /> </xs:sequence> </xs:complexType> </xs:element>
在上面的例子中,Address 元素包含子元素。這是一個用於其他<xs:element>定義的容器,允許在 XML 文件中構建簡單的元素層次結構。
全域性型別
使用全域性型別,您可以在文件中定義單個型別,所有其他引用都可以使用該型別。例如,假設您想為公司的不同地址概括person和company。在這種情況下,您可以定義一個通用型別,如下所示:
<xs:element name = "AddressType"> <xs:complexType> <xs:sequence> <xs:element name = "name" type = "xs:string" /> <xs:element name = "company" type = "xs:string" /> </xs:sequence> </xs:complexType> </xs:element>
現在讓我們在我們的示例中使用此型別,如下所示:
<xs:element name = "Address1"> <xs:complexType> <xs:sequence> <xs:element name = "address" type = "AddressType" /> <xs:element name = "phone1" type = "xs:int" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name = "Address2"> <xs:complexType> <xs:sequence> <xs:element name = "address" type = "AddressType" /> <xs:element name = "phone2" type = "xs:int" /> </xs:sequence> </xs:complexType> </xs:element>
無需兩次定義名稱和公司(一次用於Address1,一次用於Address2),我們現在只有一個定義。這使得維護更簡單,即,如果您決定向地址新增“郵政編碼”元素,您只需要在一個地方新增它們。
屬性
XSD 中的屬性在元素內提供額外資訊。屬性具有如下所示的name和type屬性:
<xs:attribute name = "x" type = "y"/>
XML - 樹狀結構
XML 文件始終具有描述性。樹狀結構通常被稱為XML 樹,它在輕鬆描述任何 XML 文件方面起著重要作用。
樹狀結構包含根(父)元素、子元素等等。透過使用樹狀結構,您可以從根開始瞭解所有後續分支和子分支。解析從根開始,然後向下移動到第一個分支的元素,從那裡取第一個分支,依此類推,直到葉子節點。
示例
以下示例演示了簡單的 XML 樹結構:
<?xml version = "1.0"?> <Company> <Employee> <FirstName>Tanmay</FirstName> <LastName>Patil</LastName> <ContactNo>1234567890</ContactNo> <Email>tanmaypatil@xyz.com</Email> <Address> <City>Bangalore</City> <State>Karnataka</State> <Zip>560212</Zip> </Address> </Employee> </Company>
以下樹結構表示上述 XML 文件:

在上圖中,有一個名為<company>的根元素。在裡面,還有一個元素<Employee>。在 employee 元素內,有五個分支,名為<FirstName>、<LastName>、<ContactNo>、<Email>和<Address>。在<Address>元素內,有三個子分支,名為<City> <State>和<Zip>。
XML - DOM
文件物件模型 (Document Object Model, DOM)是 XML 的基礎。XML 文件具有稱為節點的資訊單元的層次結構;DOM 是一種描述這些節點及其之間關係的方法。
DOM 文件是按層次結構組織的節點或資訊片段的集合。這種層次結構允許開發人員遍歷樹來查詢特定資訊。由於它基於資訊的層次結構,因此 DOM 被稱為基於樹的。
另一方面,XML DOM 還提供了一個 API,允許開發人員在樹中的任何點新增、編輯、移動或刪除節點,以建立應用程式。
示例
以下示例 (sample.htm) 將 XML 文件 (“address.xml”) 解析為 XML DOM 物件,然後使用 JavaScript 從中提取一些資訊:
<!DOCTYPE html> <html> <body> <h1>TutorialsPoint DOM example </h1> <div> <b>Name:</b> <span id = "name"></span><br> <b>Company:</b> <span id = "company"></span><br> <b>Phone:</b> <span id = "phone"></span> </div> <script> if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp = new XMLHttpRequest(); } else {// code for IE6, IE5 xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.open("GET","/xml/address.xml",false); xmlhttp.send(); xmlDoc = xmlhttp.responseXML; document.getElementById("name").innerHTML= xmlDoc.getElementsByTagName("name")[0].childNodes[0].nodeValue; document.getElementById("company").innerHTML= xmlDoc.getElementsByTagName("company")[0].childNodes[0].nodeValue; document.getElementById("phone").innerHTML= xmlDoc.getElementsByTagName("phone")[0].childNodes[0].nodeValue; </script> </body> </html>
address.xml的內容如下:
<?xml version = "1.0"?> <contact-info> <name>Tanmay Patil</name> <company>TutorialsPoint</company> <phone>(011) 123-4567</phone> </contact-info>
現在讓我們將這兩個檔案sample.htm和address.xml放在同一個目錄/xml中,並透過在任何瀏覽器中開啟它來執行sample.htm檔案。這應該產生以下輸出。

在這裡,您可以看到如何提取每個子節點以顯示其值。
XML - 名稱空間
名稱空間是一組唯一的名稱。名稱空間是一種機制,透過它可以將元素和屬性名稱分配給一個組。名稱空間由 URI(統一資源識別符號)標識。
名稱空間宣告
名稱空間使用保留屬性宣告。這樣的屬性名稱必須是xmlns或以xmlns:開頭,如下所示:
<element xmlns:name = "URL">
語法
名稱空間以關鍵字xmlns開頭。
單詞name是名稱空間字首。
URL是名稱空間識別符號。
示例
名稱空間隻影響文件中的有限區域。包含宣告的元素及其所有後代都在名稱空間的範圍內。以下是一個簡單的 XML 名稱空間示例:
<?xml version = "1.0" encoding = "UTF-8"?> <cont:contact xmlns:cont = "www.tutorialspoint.com/profile"> <cont:name>Tanmay Patil</cont:name> <cont:company>TutorialsPoint</cont:company> <cont:phone>(011) 123-4567</cont:phone> </cont:contact>
這裡,名稱空間字首是cont,名稱空間識別符號 (URI) 為www.tutorialspoint.com/profile。這意味著,帶有cont字首的元素名稱和屬性名稱(包括 contact 元素),都屬於www.tutorialspoint.com/profile名稱空間。
XML - 資料庫
XML 資料庫用於以 XML 格式儲存大量資訊。隨著 XML 在各個領域的應用越來越廣泛,需要一個安全的地方來儲存 XML 文件。資料庫中儲存的資料可以使用XQuery查詢、序列化並匯出為所需的格式。
XML 資料庫型別
XML 資料庫主要有兩種型別:
- 支援 XML 的
- 原生 XML (NXD)
支援 XML 的資料庫
支援 XML 的資料庫只不過是為轉換 XML 文件而提供的擴充套件。這是一個關係資料庫,其中資料儲存在由行和列組成的表中。表包含一組記錄,這些記錄又包含欄位。
原生 XML 資料庫
原生 XML 資料庫基於容器而不是表格式。它可以儲存大量的 XML 文件和資料。原生 XML 資料庫由XPath表示式查詢。
原生 XML 資料庫優於支援 XML 的資料庫。與支援 XML 的資料庫相比,它在儲存、查詢和維護 XML 文件方面具有更高的能力。
示例
以下示例演示了 XML 資料庫:
<?xml version = "1.0"?> <contact-info> <contact1> <name>Tanmay Patil</name> <company>TutorialsPoint</company> <phone>(011) 123-4567</phone> </contact1> <contact2> <name>Manisha Patil</name> <company>TutorialsPoint</company> <phone>(011) 789-4567</phone> </contact2> </contact-info>
在這裡,建立了一個聯絡人表,其中包含聯絡人的記錄(contact1 和 contact2),這些記錄又包含三個實體:name、company和phone。
XML - 檢視器
本章介紹了檢視 XML 文件的各種方法。可以使用簡單的文字編輯器或任何瀏覽器來檢視 XML 文件。大多數主要的瀏覽器都支援 XML。可以透過雙擊 XML 文件(如果它是本地檔案)或在位址列中鍵入 URL 路徑(如果檔案位於伺服器上)在瀏覽器中開啟 XML 檔案,就像我們在瀏覽器中開啟其他檔案一樣。XML 檔案以“.xml”副檔名儲存。
讓我們探索可以檢視 XML 檔案的各種方法。以下示例 (sample.xml) 用於檢視本章的所有部分。
<?xml version = "1.0"?> <contact-info> <name>Tanmay Patil</name> <company>TutorialsPoint</company> <phone>(011) 123-4567</phone> </contact-info>
文字編輯器
任何簡單的文字編輯器,如記事本、TextPad 或 TextEdit,都可以用來建立或檢視 XML 文件,如下所示:

Firefox 瀏覽器
透過雙擊檔案在 Chrome 中開啟上述 XML 程式碼。XML 程式碼以彩色顯示編碼,使程式碼更易於閱讀。它在 XML 元素左側顯示加號 (+) 或減號 (-)。當我們單擊減號 (-) 時,程式碼會隱藏。當我們單擊加號 (+) 時,程式碼行會展開。Firefox 中的輸出如下所示:

Chrome 瀏覽器
在 Chrome 瀏覽器中開啟上述 XML 程式碼。程式碼顯示如下:

XML 文件中的錯誤
如果您的 XML 程式碼缺少某些標記,則瀏覽器中會顯示一條訊息。讓我們嘗試在 Chrome 中開啟以下 XML 檔案:
<?xml version = "1.0"?> <contact-info> <name>Tanmay Patil</name> <company>TutorialsPoint</company> <phone>(011) 123-4567</phone> </contact-info>
在上面的程式碼中,起始標記和結束標記不匹配(參考 contact_info 標記),因此瀏覽器會顯示錯誤訊息,如下所示:

XML - 編輯器
XML 編輯器是一種標記語言編輯器。可以使用現有的編輯器(例如記事本、WordPad 或任何類似的文字編輯器)來編輯或建立 XML 文件。您還可以線上或下載專業 XML 編輯器,它具有更強大的編輯功能,例如:
- 它會自動關閉未關閉的標記。
- 它嚴格檢查語法。
- 它以彩色突出顯示 XML 語法,以提高可讀性。
- 它可以幫助您編寫有效的 XML 程式碼。
- 它提供針對 DTD 和模式的 XML 文件的自動驗證。
開源 XML 編輯器
以下是一些開源 XML 編輯器:
線上 XML 編輯器 - 這是一款輕量級的 XML 編輯器,您可以線上使用。
Xerlin - Xerlin 是一個針對 Java 2 平臺的開源 XML 編輯器,在 Apache 許可下發布。它是一個基於 Java 的 XML 建模應用程式,可以輕鬆建立和編輯 XML 檔案。
CAM - 內容組裝機制 (CAM - Content Assembly Mechanism) - CAM XML 編輯器工具帶有 Oracle 贊助的 XML+JSON+SQL Open-XDX。
XML - 解析器
XML 解析器是一個軟體庫或包,它為客戶端應用程式提供與 XML 文件互動的介面。它檢查 XML 文件的格式是否正確,也可能驗證 XML 文件。現代瀏覽器具有內建的 XML 解析器。
下圖顯示了 XML 解析器如何與 XML 文件互動:

解析器的目標是將 XML 轉換為可讀的程式碼。
為了簡化解析過程,有一些商業產品可以促進 XML 文件的分解併產生更可靠的結果。
一些常用的解析器如下所示:
MSXML (Microsoft Core XML Services) - 這是 Microsoft 提供的一套標準 XML 工具,其中包括一個解析器。
System.Xml.XmlDocument - 此類是 .NET 庫的一部分,其中包含許多與使用 XML 相關的不同類。
Java 內建解析器 - Java 庫有自己的解析器。該庫的設計使得您可以用外部實現(例如 Apache 的 Xerces 或 Saxon)替換內建解析器。
Saxon - Saxon 提供用於解析、轉換和查詢 XML 的工具。
Xerces - Xerces 使用 Java 實現,由著名的開源 Apache 軟體基金會開發。
XML - 處理器
當軟體程式讀取 XML 文件並相應地採取行動時,這稱為處理XML。任何可以讀取和處理 XML 文件的程式都稱為XML 處理器。XML 處理器讀取 XML 檔案並將其轉換為記憶體中的結構,程式的其餘部分可以訪問這些結構。
最基本的 XML 處理器讀取 XML 文件並將其轉換為內部表示,供其他程式或子程式使用。這稱為解析器,它是每個 XML 處理程式的重要組成部分。
處理器涉及處理指令,這可以在處理指令章節中學習。
型別
XML 處理器分為驗證型或非驗證型,這取決於它們是否檢查 XML 文件的有效性。發現有效性錯誤的處理器必須能夠報告它,但可以繼續進行正常的處理。
一些驗證解析器包括 − xml4c(IBM,C++編寫),xml4j(IBM,Java編寫),MSXML(微軟,Java編寫),TclXML(TCL),xmlproc(Python),XML::Parser(Perl),Java Project X(Sun,Java編寫)。
一些非驗證解析器包括 − OpenXML(Java),Lark(Java),xp(Java),AElfred(Java),expat(C),XParse(JavaScript),xmllib(Python)。