什麼是XML:html
HTML 中使用的標籤都是預約義的。HTML 文檔只能使用在 HTML 標準中定義過的標籤(如 <p>、<h1> 等等)。node
XML 容許創做者定義本身的標籤和本身的文檔結構。數據庫
經過使用幾行 JavaScript 代碼,您就能夠讀取一個外部 XML 文件,並更新您的網頁的數據內容。框架
XML 數據以純文本格式進行存儲,所以提供了一種獨立於軟件和硬件的數據存儲方法;這讓建立不一樣應用程序能夠共享的數據變得更加容易。this
XML 文檔造成了一種樹結構,它從"根部"開始,而後擴展到"枝葉"。編碼
<?xml version="1.0" encoding="UTF-8"?> <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note>
第一行是 XML 聲明。它定義 XML 的版本(1.0)和所使用的編碼(UTF-8 : 萬國碼, 可顯示各類語言)。spa
下一行描述文檔的根元素(像在說:"本文檔是一個便籤");接下來 4 行描述根的 4 個子元素(to, from, heading 以及 body);最後一行定義根元素的結尾。設計
<bookstore> <book category="COOKING"> <title lang="en">Everyday Italian</title> <author>Giada De Laurentiis</author> <year>2005</year> <price>30.00</price> </book> </bookstore> //標籤中的屬性:category指種類,lang指語言
XML將數據組織成爲一棵樹,DOM 經過解析 XML 文檔,爲 XML 文檔在邏輯上創建一個樹模型,樹的節點是一個個的對象。這樣經過操做這棵樹和這些對象就能夠完成對 XML 文檔的操做,爲處理文檔的全部方面提供了一個完美的概念性框架。指針
以下XML文檔:code
<line id="1"> the <bold>First</bold>line</line>
因爲DOM「一切都是節點(everything-is-a-node)」,XML樹的每一個 Document、Element、Text 、Attr和Comment都是 DOM Node。
由上面例子可知, DOM 實質上是一些節點的集合。因爲文檔中可能包含有不一樣類型的信息,因此定義了幾種不一樣類型的節點,如:Document、Element、Text、Attr 、CDATASection、ProcessingInstruction、Notation 、EntityReference、Entity、DocumentType、DocumentFragment等。
語法規則:
一、XML 必須包含根元素,它是全部其餘元素的父元素。
二、XML 聲明文件的可選部分,若是存在須要放在文檔的第一行(聲明放第一行)。
三、在 XML 中,省略關閉標籤是非法的,全部元素都必須有關閉標籤。
四、XML 標籤對大小寫敏感,標籤 <Letter> 與標籤 <letter> 是不一樣的。
五、XML 屬性值必須加引號。在 XML 中,您應該儘可能避免使用屬性。若是信息感受起來很像數據,那麼請使用元素吧。
理念:元數據(有關數據的數據)應當存儲爲屬性,而數據自己應當存儲爲元素。
六、在 XML 中,一些字符擁有特殊的意義。
若是您把字符 "<" 放在 XML 元素中,會發生錯誤,這是由於解析器會把它看成新元素的開始。
這樣會產生 XML 錯誤:<message>if salary < 1000 then</message>
爲了不這個錯誤,請用實體引用來代替 "<" 字符:<message>if salary < 1000 then</message>
在 XML 中,有 5 個預約義的實體引用:
註釋:在 XML 中,只有字符 "<" 和 "&" 確實是非法的。大於號是合法的,可是用實體引用來代替它是一個好習慣。
七、在 XML 中編寫註釋的語法與 HTML 的語法很類似:<!-- This is a comment -->
八、HTML 會把多個連續的空格字符裁減(合併)爲一個,在 XML 中,文檔中的空格不會被刪減。
九、XML 以 LF 存儲換行,Windows 中是回車符(CR)和換行符(LF),在 Unix 和 Mac OSX 中使用 LF,在舊的 Mac 系統中使用 CR 來存儲。
十、XML 元素必須遵循如下命名規則:
可以使用任何名稱,沒有保留的字詞。
十一、最佳命名習慣:
使名稱具備描述性。使用下劃線的名稱也很不錯:<first_name>、<last_name>。
名稱應簡短和簡單,好比:<book_title>,而不是:<the_title_of_the_book>。
避免 "-" 字符。若是您按照這樣的方式進行命名:"first-name",一些軟件會認爲您想要從 first 裏邊減去 name。
避免 "." 字符。若是您按照這樣的方式進行命名:"first.name",一些軟件會認爲 "name" 是對象 "first" 的屬性。
避免 ":" 字符。冒號會被轉換爲命名空間來使用(稍後介紹)。
XML 文檔常常有一個對應的數據庫,其中的字段會對應 XML 文檔中的元素。有一個實用的經驗,即便用數據庫的命名規則來命名 XML 文檔中的元素。
在 XML 中,éòá 等非英語字母是徹底合法的,不過須要留意,您的軟件供應商不支持這些字符時可能出現的問題。
十二、XML 元素是可擴展的:
XML 元素是可擴展,以攜帶更多的信息;請看下面的 XML 實例:
讓咱們設想一下,咱們建立了一個應用程序,可將 <to>、<from> 以及 <body> 元素從 XML 文檔中提取出來,併產生如下的輸出:
MESSAGE To: Tove Don't forget me this weekend! |
想象一下,XML 文檔的做者添加的一些額外信息:
那麼這個應用程序會中斷或崩潰嗎?
不會。這個應用程序仍然能夠找到 XML 文檔中的 <to>、<from> 以及 <body> 元素,併產生一樣的輸出。
XML 的優點之一,就是能夠在不中斷應用程序的狀況下進行擴展。
1三、XML DTD
DTD 的目的是定義 XML 文檔的結構。它使用一系列合法的元素來定義文檔結構:
1四、XML Schema
W3C 支持一種基於 XML 的 DTD 代替者,它名爲 XML Schema:
1五、在 XML 中的命名衝突能夠經過使用名稱前綴從而容易地避免:<h:table>
當在 XML 中使用前綴時,一個所謂的用於前綴的命名空間必須被定義。
命名空間是在元素的開始標籤的 xmlns 屬性中定義的。
命名空間聲明的語法以下。xmlns:前綴="URI"。
<h:table xmlns:h="http://www.w3.org/TR/html4/">
命名空間被定義在元素的開始標籤中時,全部帶有相同前綴的子元素都會與同一個命名空間相關聯。
命名空間,能夠在他們被使用的元素中或者在 XML 根元素中聲明:
<root xmlns:h="http://www.w3.org/TR/html4/"
xmlns:f="http://www.w3cschool.cc/furniture">
命名空間 URI 不會被解析器用於查找信息。
其目的是賦予命名空間一個唯一的名稱。不過,不少公司經常會做爲指針來使用命名空間指向實際存在的網頁,這個網頁包含關於命名空間的信息。
統一資源標識符(URI),統一資源定位器(URL)。
爲元素定義默認的命名空間可讓咱們省去在全部的子元素中使用前綴的工做。它的語法以下:xmlns="namespaceURI"
1六、XML 文檔中的全部文本均會被解析器解析,只有 CDATA 區段中的文本會被解析器忽略。
XML 解析器一般會解析 XML 文檔中全部的文本。
當某個 XML 元素被解析時,其標籤之間的文本也會被解析:<message>This text is also parsed</message>
解析器之因此這麼作是由於 XML 元素可包含其餘元素,就像這個實例中,其中的 <name> 元素包含着另外的兩個元素(first 和 last):
而解析器會把它分解爲像這樣的子元素:
解析字符數據(PCDATA)是 XML 解析器解析的文本數據使用的一個術語。
某些文本,好比 JavaScript 代碼,包含大量 "<" 或 "&" 字符。爲了不錯誤,能夠將腳本代碼定義爲 CDATA。
CDATA 部分中的全部內容都會被解析器忽略,CDATA 部分由 "<![CDATA[" 開始,由 "]]>" 結束:
<script>
< ![CDATA[
function matchwo(a,b)
{
if (a < b && a < 0) then
{
return 1;
}
else
{
return 0;
}
}
]]>
< /script>
不容許嵌套的 CDATA 部分