一、XML簡介
XML是一種標記語言,用於描述數據,它提供一種標准化的方式來來表示文本數據。XML文檔以.xml為后綴。需要徹底注意的是XML是區分大小寫的。
先從一個簡單的XML例子來了解下xml基礎:
<?xml version="1.0" encoding="utf-8" ?> <books ISBN="9787544238212"> <title>xml學習筆記</title> <price>30</price> <pagecount>300</pagecount> </books>
第一行表明,本XML遵守的版本是1.0,使用的字符編碼是UTF-8字符集。
每個XML元素都已一個起始標記開始和一個結束標記結束。比如開始:<title>,結束:</title>。XML元素可以帶有屬性,屬性值要加引號。比如上例中的ISBN就是屬性,屬性值要加雙引號。同時用等號連接。
一個XML文檔只能夠有一個根節點,如上例中books就是根節點。
以下列出XML的幾個要點:
- XML是一種可擴展標記語言;
- XML的標記沒有被預定義,用戶可以自行定義標記來描述數據;
- XML主要用來描述和存儲數據;
- XML具有自我描述性;
- XML是樹狀結構的文檔,是個結構化的文檔;
- XML文檔是個文本文件;
二、XML語法
- 每個開始標記都必須有結束標記;
- 一個XML文檔只能夠有一個根元素;
- 所有XML元素必須正確嵌套;
- 屬性值必須加引號;
- 一個元素不能有相同的屬性;
下面以示例來解釋XML常用的術語。
1、標記
標記分為開始標記和結束標記,如<title>就是一個開始標記。</title>就是一個結束標記。開始標記與結束標記之間的內容成為XML元素的內容。如果一個XML元素沒有內容,我們稱其為空元素。如<title></title>。
2、元素
XML元素是從一個開始標記到它結束標記的一段內容。比如 <title>XML學習筆記</title> 就是一個元素。
3、屬性
一個元素可以帶有屬性,屬性寫在開始標記里,寫在元素名稱的后面。比如<books ISBN="9787544238212">,其中ISBN="9787544238212"就是books元素的一個屬性。ISBN 是屬性的名稱, 9787544238212 是屬性值。一個XML元素不能有相同的XML屬性名。
三、XML元素之間的關系
- 子節點;
- 父節點;
- 並列節點(兄弟關系);
下面以一個例子來解釋這三種關系。
<?xml version="1.0" encoding="utf-8" ?> <father>Tom Smith <son> John Smith <grandson>Hans Smith</grandson> </son> <daughter>Jane Smith</daughter> </father>
在上面的例子中,son元素就是father元素的子節點。father元素就是son元素和daughter元素的父節點。son元素和daughter又稱並列節點。
XML元素中可以帶有屬性作為XML元素的附加信息。
如果屬性值中包含雙引號,就用單引號包圍屬性值。如:
<site info = 'wo "ai" ni'>
如果屬性值中包含單引號,就用雙引號包圍屬性值。如:
<site info = "wo 'ai' ni">
一個XML元素可以有一個或多個屬性,每個屬性用空格分開。如:
<person name="zhangsan" age="23">
四、XML名稱命名規則
XML的名稱可以包含英文字母和數字,或者其他字符比如下划線。XML名稱不能以數字或者標點符號開頭,XML不能以xml開頭(或者xml的大小寫,因為這是XML相關標准的保留詞)。XML名稱不能包含空格,雖然XML名稱支持下划線(_)、連字符(-)、句號(.)和冒號(:),但XML開頭不能使用連字符(-)、句號(.)和冒號(:)。
1、XML實體應用
(1)、在XML標記里除了表示一個標記的開始之外,不允許有小於號<,因為小於號總是被XML解析器解釋為一個標記的開始。
如 :
<person> if age < 10 </person>
這行代碼是錯誤的,如果一定要在XML元素內容里書寫小於號,那么可以使用小於號的實體引用,即:< 來替換小於號。
如:
<person> if age < 10</person>
是正確的寫法。
(2)在XML里也不能使用&這個字符,因為&被解釋為某個實體引用的開始。所以必須使用&的實體引用& 來代替&。
如:
- <person>a & b</person> 是錯誤的
- <person>a & b</person> 是正確的
下面給出XML5個預定的實體引用
實體引用 | 字符 | 說明 |
< | < | 小於號 |
> | > | 大於號 |
& | & | 和 |
' | ' | 單引號 |
" | " | 雙引號 |
當XML解析器解析含有上述實體引用的XML文檔時,會將這些實體引用轉換成相應的字符。
只有<和&在XML是非法的。另外幾個是合法的,可以直接寫,只是用實體引用更加清晰而已。
2、XML CDATA區
當需要往XML文檔里添加一段內容,而內容里有很多<或者&的時候,將所有<或&轉換為實體引用是很麻煩的事情,這時候可以使用CDATA區,在CDATA區里不必使用實體引用,因為XML解析器不會計算CDATA區里的內容。
CDATA區以 <![CDATA[ 開始 ,以 ]]> 結束
示例如下:
<mycode> <![CDATA[ <html> <title></title> <body></body> </html> ]]> </mycode>
需要注意的是:在CDATA區內,不能出現 ]]>
3、XML注釋
XML注釋以 <!-- 開始,以 --> 結束。
示例:
<!-- 這是注釋 -->
在XML注釋里面,除了結束符-->,不能出現兩個連字符--。XML注釋也可以放在元素內容里。
4、XML聲明
XML文檔應當以XML聲明開始,不過不是必須的。
示例:
<?xml version="1.0" encoding="utf-8" standalone="yes" ?> <person> 張三 </person>
如果一個XML文檔含有聲明,必須放在XML文檔的第一行。
XML文檔聲明主要有三個參數。
- 版本:版本表示遵循的是W3C的XML1.0標准。
- 字符編碼:字符編碼表示該XML文檔使用的字符編碼方式。對於中文文檔,應該使用UTF-8或者Unicode。如果是純英文,可以使ISO-8859-1編碼。
- 獨立:如果XML standalone的值是no,表示它需要DTD。不需要DTD的XML文檔,standalone的值應該寫為yes。
5、格式正確的XML文檔。
- 每個開始標記必須有結束標記。
- XML文檔只有一個根元素。
- XML元素必須被正確嵌套。
- XML元素不能有相同名稱的屬性。
- XML屬性值必須加引號。
- XML注釋不能卸載標記里。
- XML文檔里不能出現<和&標記。必須用實體引用代替。
6、XML命名空間
XML命名空間是為了解決當XML文檔中存在多個相同名稱的元素時,避免沖突而引入的。
命名空間的語法:
- xmlns:prefix="URI"
- xmlns:表示必須的屬性。
- prefix:表示命名空間的別名,它的值不能為xml。
- URI:用來標識抽象或物理資源的的緊湊字符串。為了保證標識的唯一性,xml采用Internet上的網址作為這個標識符,因為網址是獨一無二的。
默認命名空間示例:
<?xml version="1.0" encoding="utf-8" ?> <Article xmlns="http://www.xxx.com/"> <!--默認命名空間--> <author age="30">張三</author> <length>12000</length> <price>42</price> </Article>
帶名字的命名空間|:
<?xml version="1.0" encoding="utf-8" ?> <h:Article xmlns:h="http://www.xxx.com/"> <!--帶前綴的命名空間--> <h:author age="30">張三</h:author> <h:length>12000</h:length> <h:price>42</h:price> </h:Article>
7、DTD和XML Schema
DTD文檔類型定義,是一套關於標記符的語法規則。它是XML1.0班規格的一部分,是XML文件的驗證機制。屬於XML文件組成的一部分。DTD是一種保證XML文檔格式正確的有效方法,可以通過比較XML文檔和DTD文件來看文檔是否符合規范,元素和標簽使用是否正確。一個DTD文檔包括:元素的定義規則,元素間關系的定義規則,元素可使用的屬性、可使用的實體或符號規則。不同的公司之需定義好標准的DTD,個公司都能夠依照DTD建立XML文件,並且進行驗證,如此就可以輕易的建立標准與交換數據。這樣便滿足了網絡共享和數據交互。
DTD文件是一個ASCII的文本文件,后綴名為.dtd。每一個XML文檔都可以攜帶一個DTD,用來對該文檔格式進行描述,測試該文檔是否為有效的XML文檔。
XML Schema如果DTD一樣是負責定義和描述XML文檔的結構和內容模式的。它可以定義XML文檔中存在哪些元素和元素之間的關系,並且可以定義元素和屬性的數據類型。是針對DTD的某些缺點,如:DTD不支持數據類型,擴展性較差等而出現的。
XML Schema具有以下優點:
- 一致性:Schema使得XML得定義不必再利用一種特定的形式化語言,而是直接借助XML自身的特性,利用XML的基本語法規則來定義XML文檔的結構。
- 擴展性:Schema對DTD進行了擴充,引入了數據類型,命名空間,從而具備較強的可擴展性。
- 互換性:利用Schema,我們能夠書寫XML文檔以及驗證文檔的合法性。另外通過特性的映射機制,還可以將不同的Schema進行轉換,以實現更高層次的數據交換。
- 規范性:同DTD一樣,Schema野提供了一套完整的機制以約束XML文檔中的標記的使用。相比之下Schema基於XML,更具有規范性。
- XML Schema的限制功能例如:那些元素可以出現在文檔中,元素間的關系是什么,每個元素有那些內容和屬性以及元素出現的順序和次數等等。