XML简介及举例
可擴展標記語言(eXtensibleMarkup Language,簡稱XML),是一種標記語言。標記指計算機所能理解的信息符號,通過此種標記,計算機之間可以處理包含各種信息的文章等。如何定義這些標記,既可以選擇國際通用的標記語言,比如HTML,也可以使用像XML這樣由相關人士自由決定的標記語言,這就是語言的可擴展性。
XML被設計用來傳輸和存儲數(shù)據(jù)。HTML被設計用來顯示數(shù)據(jù)。
用途:XML設計用來傳送及攜帶數(shù)據(jù)信息,不用來表現(xiàn)或展示數(shù)據(jù),HTML語言則用來表現(xiàn)數(shù)據(jù),所以XML用途的焦點是它說明數(shù)據(jù)是什么,以及攜帶數(shù)據(jù)信息。(1)、豐富文件:自定義描述并使其更豐富:屬于文件為主的XML技術應用;標記是用來定義一份資料應該如何呈現(xiàn);(2)、元數(shù)據(jù):描述其它文件或網(wǎng)絡資訊;屬于資料為主的XML技術應用;標記是用來說明一份資料的意義;(3)、配置文檔:描述軟件設置的參數(shù)。
結構:每個XML文檔都由XML序言開始,告訴解析器或瀏覽器這個文件應該按照XML規(guī)則進行解析。之后就是XML的根元素。任何XML文檔都只能有一個跟元素。根元素里面,可以有子元素,子元素里面可以有子子元素,以此類推。根元素是由文檔類型定義(DTD)或XML剛要定義的。XML文件的第二行并不一定要包含文檔元素,如果有注釋或者其他內(nèi)容,文檔元素可以遲些出現(xiàn)。
1、XML簡介:XML指可擴展標記語言。XML是一種標記語言,很類似HTML。XML的設計宗旨是傳輸數(shù)據(jù),而非顯示數(shù)據(jù)。XML標簽沒有被預定義,你需要自行定義標簽。XML被設計為具有自我描述性。XML是W3C的推薦標準。
???????? XML與HTML的主要差異:(1)、XML不是HTML的替代;(2)、XML和HTML為不同的目的而設計;(3)、XML被設計為傳輸和存儲數(shù)據(jù),其焦點是數(shù)據(jù)的內(nèi)容;(4)、HTML被設計用來顯示數(shù)據(jù),其焦點是數(shù)據(jù)的外觀;(5)、HTML旨在顯示信息,而XML旨在傳輸信息。
???????? 沒有任何行為的XML。
XML僅僅是純文本。
通過XML你可以發(fā)明自己的標簽。在HTML中使用的標簽是預定義的,HTML文檔只使用在HTML標準中定義過的標簽。XML允許創(chuàng)作者定義自己的標簽和自己的文檔結構。
XML不是對HTML的替代,XML是對HTML的補充。XML是獨立于軟件和硬件的信息傳輸工具。
2、XML用途:XML應用與web開發(fā)的許多方面,常用于簡化數(shù)據(jù)的存儲和共享。
???????? XML把數(shù)據(jù)從HTML分離:如果你需要在HTML文檔中顯示動態(tài)數(shù)據(jù),那么每當數(shù)據(jù)改變時將花費大量的時間來編輯HTML。通過XML,數(shù)據(jù)能夠存儲在獨立的XML文件中,這樣你就可以專注于使用HTML進行布局和顯示,并確保修改底層數(shù)據(jù)不再需要對HTML進行任何的改變。通過使用幾行JavaScript,你就可以讀取一個外部XML文件,然后更新HTML中的數(shù)據(jù)內(nèi)容。
???????? XML簡化數(shù)據(jù)共享:XML數(shù)據(jù)以純文本格式進行存儲,因此提供了一種獨立于軟件和硬件的數(shù)據(jù)存儲方法。這讓創(chuàng)建不同應用程序可以共享的數(shù)據(jù)變得更加容易。
???????? XML簡化數(shù)據(jù)傳輸:通過XML,可以在不兼容的系統(tǒng)之間輕松地交換數(shù)據(jù)。
???????? XML簡化平臺的變更:XML數(shù)據(jù)以文本格式存儲,這使得XML在不損失數(shù)據(jù)的情況下,更容易擴展或升級到新的操作系統(tǒng)、新應用程序和新的瀏覽器。
???????? XML使你的數(shù)據(jù)更有用:不同的應用程序都能夠訪問你的數(shù)據(jù),不僅僅在HTML頁中,也可以從XML數(shù)據(jù)源中進行訪問。通過XML,你的數(shù)據(jù)可供各種閱讀設備使用。
???????? XML用于創(chuàng)建新的Internet語言:很多新的Internet語言是通過XML創(chuàng)建的。
3、XML數(shù)結構:XML文檔形成了一種樹結構,它從“根部”開始,然后擴展到“枝葉”。
???????? XML使用簡單的具有自我描述性的語法。
???????? XML文檔形成一種樹結構:XML文檔必須包含根元素。該元素是所有其他元素的父元素。XML文檔中的元素形成了一顆文檔數(shù)。這棵樹從根部開始,并擴展到數(shù)的底端。所有元素均可擁有子元素。父、子以及同胞等術語用于描述元素之間的關系。父元素擁有子元素。相同層級上的子元素成為同胞(兄弟或姐妹)。所有元素均可擁有文本內(nèi)容和屬性(類似HTML中)。
4、XML語法:XML的語法規(guī)則很簡單,且很有邏輯。
???????? 所有XML元素都須有關閉標簽。在XML中,省略關閉標簽是非法的。所有元素都必須有關閉標簽。在HTML,經(jīng)常會看到?jīng)]有關閉標簽的元素。
???????? XML聲明沒有關閉標簽。這不是錯誤。聲明不屬于XML本身的組成部分。它不是XML元素,也不需要關閉標簽。
???????? XML標簽對大小寫敏感。XML元素使用XML標簽進行定義。必須使用相同的大小寫來編寫打開標簽和關閉標簽。打開標簽和關閉標簽通常被稱為開始標簽和結束標簽。
???????? XML必須正確地嵌套。在HTML中,常會看到?jīng)]有正確嵌套的元素。在XML中,所有元素都必須彼此正確地嵌套。
???????? XML文檔必須有根元素。XML文檔必須有一個元素是所有其他元素的父元素,該元素稱為根元素。
???????? XML的屬性值須加引號。與HTML類似,XML也可擁有屬性(名稱/值的對)。在XML中,XML的屬性值須加引號。
???????? 實體引用:在XML中,一些字符擁有特殊的意義。如果你把字符”<”放在XML元素中,會發(fā)生錯誤,這是因為解析器會把它當作新元素的開始。為了避免這個錯誤,請用實體引用來代替”<”字符。
???????? 在XML中,有5個預定義的實體引用:<(<),>(>), &(&), '(‘), "(“).在XML中,只有字符”<”和”&”確實是非法的。大于號是合法的。但是用實體引用來代替它是一個好習慣。
???????? XML中的注釋:在XML中編寫注釋的語法與HTML中的語法相似。
???????? 在XML中,空格會被保留:HTML會把多個連續(xù)的空格字符裁減(合并)為一個。在XML中,文檔中的空格不會被刪節(jié)。
???????? XML以LF存儲換行。
5、XML元素:XML文檔包含XML元素。
???????? XML元素指的是從(且包括)開始標簽直到(且包括)結束標簽的部分。元素可包含其它元素、文本或者兩者的混合物。元素也可以擁有屬性。
???????? XML命名規(guī)則:XML元素必須遵循以下命名規(guī)則:(1)、名稱可以含字母、數(shù)字以及其它的字符;(2)、名稱不能以數(shù)字或者標點符號開始;(3)、名稱不能以字符”xml”(或者XML、Xml)開始;(4)、名稱不能包含空格。可使用任何名稱,沒有保留的字詞。
???????? 最佳命名習慣:(1)、使名稱具有描述性,使用下劃線的名稱也很不錯;(2)、名稱應當比較簡短;(3)、避免”-”、”.”、”:”字符。XML文檔經(jīng)常有一個對應的數(shù)據(jù)庫,其中的字段會對應XML文檔中的元素。有一個實用的經(jīng)驗,即使用數(shù)據(jù)庫的名稱規(guī)則來命名XML文檔中的元素。
???????? 非英語的字母也是合法的XML元素名,不過需要留意軟件開發(fā)商不支持這些字符時可能出現(xiàn)的問題。
???????? XML元素是可擴展的。XML元素是可擴展,以攜帶更多的信息。XML的優(yōu)勢之一,就是可以經(jīng)常在不中斷應用程序的情況下進行擴展。
6、XML屬性:XML元素可以在開始標簽中包含屬性,類似HTML。屬性提供關于元素的額外(附加)信息。
???????? 在HTML中(以及在XML中),屬性提供有關元素的額外信息。屬性通常提供不屬于數(shù)據(jù)組成部分的信息。
???????? XML屬性必須加引號。屬性值必須被引號包圍,不過單引號和雙引號均可使用。如果屬性值本身包含雙引號,那么有必要使用單引號包圍它,或者可以使用實體引用。
???????? XML元素vs.屬性:沒有什么規(guī)矩可以告訴我們什么時候該使用屬性,而什么時候該使用子元素。在HTML中,屬性用起來很便利,但是在XML中,你應該盡量避免使用屬性。如果信息感覺起來很像數(shù)據(jù),那么請石永剛子元素吧。
???????? 使用屬性而引起的一些問題:(1)、屬性無法包含多重的值(元素可以);(2)、屬性無法描述樹結構(元素可以);(3)、屬性不易擴展;(4)、屬性難以閱讀和維護。請盡量使用元素來描述數(shù)據(jù)。而僅僅使用屬性來提供與數(shù)據(jù)無關的信息。
???????? 針對元數(shù)據(jù)的XML屬性:有時候會向元素分配ID引用。這些ID索引可用于標識XML元素,它其作用的方式與HTML中ID屬性是一樣的。
???????? 元數(shù)據(jù)(有關數(shù)據(jù)的數(shù)據(jù))應當存儲為屬性,而數(shù)據(jù)本身應當存儲為元素。
7、XML驗證:擁有正確語法的XML被稱為“形式良好”的XML。通過DTD驗證的XML是“合法”的XML。
???????? “形式良好”或“結構良好”的XML文檔擁有正確的語法。
???????? 驗證XML文檔:合法的XML文檔是“形式良好”的XML文檔,同樣遵守文檔類型定義(DTD)的語法規(guī)則。
???????? DTD的作用是定義XML文檔的結構。它使用一系列合法的元素來定義文檔結構。
???????? XMLSchema:W3C支持一種基于XML的DTD代替者,它名為XML Schema。
8、XML驗證器:XML錯誤會終止你的程序。
???????? XML文檔中的錯誤會終止你的XML程序。W3C的XML規(guī)范聲明,如果XML文檔存在錯誤,那么程序就不應當繼續(xù)處理這個文檔。
???????? 如果使用HTML,創(chuàng)建包含大量錯誤的文檔是有可能的。其中一個主要的原因是HTML瀏覽器相當臃腫,兼容性也很差,并且它們有自己的方式來確定當發(fā)現(xiàn)錯誤時文檔應該顯示為什么樣子。使用XML時,這種情況不應當存在。
9、XML瀏覽器支持:幾乎所有的主流瀏覽器均支持XML和XSLT。
10、查看XML文件:在所有現(xiàn)代瀏覽器中,均能夠查看原始的XML文件。
???????? XML文檔不會攜帶有關如何顯示數(shù)據(jù)的信息。由于XML標簽由XML文檔的作者”發(fā)明”,瀏覽器無法確定像<table>這樣的一個標簽究竟描述一個HTML表格還是一個餐桌。在沒有任何有關如何顯示數(shù)據(jù)的信息的情況下,大多數(shù)的瀏覽器都會僅僅把XML文檔顯示為源代碼。
11、使用CSS顯示XML:通過使用CSS,可為XML文檔添加顯示信息。
???????? 使用CSS來格式化XML文檔是有可能的。
???????? 使用CSS格式化XML不是常用的方法,更不能代表XML文檔樣式化的未來。W3C推薦使用XSLT。
12、使用XSLT顯示XML:通過使用XSLT,你可以向XML文檔添加顯示信息。
???????? XSLT(eXtensibleStylesheet Language Transformations)遠比CSS更加完善。
???????? 使用XSLT的方法之一是在瀏覽器顯示XML文件之前,先把它轉(zhuǎn)換為HTML。
???????? 在服務器上通過XSLT轉(zhuǎn)換XML。在使用XSLT來轉(zhuǎn)換XML時,不同的瀏覽器可能會產(chǎn)生不同結果。為了減少這種問題,可以在服務器上進行XSLT轉(zhuǎn)換。
13、XMLHttpRequest對象:XMLHttpRequest對象用于在后臺與服務器交換數(shù)據(jù)。
???????? XMLHtttpRequest對象是開發(fā)者的夢想,因為你能夠:(1)、在不重新加載頁面的情況下更新網(wǎng)頁;(2)、在頁面已加載后從服務器請求數(shù)據(jù);(3)、在頁面已加載后從服務器接收數(shù)據(jù);(4)、咋后臺向服務器發(fā)送數(shù)據(jù)。
???????? 所有現(xiàn)代的瀏覽器都支持XMLHttpRequest對象。
???????? 所有現(xiàn)代瀏覽器都內(nèi)建了XMLHttpRequest對象。通過一行簡單的JavaScript代碼,就可以創(chuàng)建XMLHttpRequest對象:xmlhttp =new XMLHttpRequest();
???????? XML/ASP:你也可以把XML文檔打開并發(fā)送到服務器上的ASP頁面,分析此請求,然后傳回結果。
???????? 任何W3C推薦標準均未規(guī)定XMLHttpRequest對象。
14、XML解析器:所有現(xiàn)代瀏覽器都內(nèi)建了供讀取和操作XML的XML解析器。解析器吧XML轉(zhuǎn)換為XML DOM對象----可通過JavaScript操作的對象。
???????? 解析器把XML載入內(nèi)存,然后把它轉(zhuǎn)換為可通過JavaScript訪問的XML DOM對象。
???????? 跨域訪問:出于安全方面的原因,現(xiàn)代的瀏覽器不允許跨域的訪問。這意味著,網(wǎng)頁以及它試圖加載的XML文件,都必須位于相同的服務器上。
15、XMLDOM:DOM(Document Object Model,文檔對象模型)定義了訪問和操作文檔的標準方法。DOM把XML文檔作為樹結構來查看。能夠通過DOM樹來訪問所有元素。可以修改或刪除它們的內(nèi)容,并創(chuàng)建新元素。元素,它們的文本,以及它們的屬性,都被認為是節(jié)點。
???????? HTMLDOM(HTML Document Object Model)定義了訪問和操作HTML文檔的標準方法。可以通過HTML DOM訪問所有HTML元素。
???????? InternetExplorer使用loadXML()方法來解析XML字符串,而其它瀏覽器使用DOMParser對象。
16、XMLto HTML:在HTML中顯示XML數(shù)據(jù)。
17、XML命名空間(XML Namespaces):XML命名空間提供避免元素命名沖突的方法。
???????? 在XML中,元素名稱是由開發(fā)者定義的,當兩個不同的文檔使用相同的元素名時,就會發(fā)生命名沖突。
???????? XMLNamespace(xmlns)屬性:XML命名空間屬性被放置于元素的開始標簽之中,并使用以下語法:xmlns:namespace-prefix=”namespaceURI”
???????? 當命名空間被定義在元素的開始標簽中時,所有帶有相同前綴的子元素都會與同一個命名空間相關聯(lián)。用于表示命名空間的地址不會被解析器用于查找信息。其唯一的作用是賦予命名空間一個唯一的名稱。不過,很多公司常常會作為指針來使用命名空間指向?qū)嶋H存在的網(wǎng)頁,這個網(wǎng)頁包含關于命名空間的信息。
???????? 統(tǒng)一資源標識符(UniformResource Identifier(URI)):統(tǒng)一資源標識符是一串可以標識因特網(wǎng)資源的字符。最常見的URI是用來標示因特網(wǎng)域名地址的統(tǒng)一資源定位器(URL).另一個不那么常用的URI是統(tǒng)一資源命名(URN)。
???????? 默認的命名空間:為元素定義默認的命名空間可以讓我們省去在所有的子元素中使用前綴的工作,語法:xmlns=”namespaceURI”
18、XMLCDATA:所有XML文檔中的文本均會被解析器解析。只有CDATA區(qū)段(CDATA section)中的文本會被解析器忽略。
???????? PCDATA值的是被解析的字符數(shù)據(jù)(ParsedCharacter Data)。XML解析器通常會解析XML文檔中的所有的文本。當某個XML元素被解析時,其標簽之間的文本也會被解析。解析器之所以這么做是因為XML元素可包含其它元素。
???????? 轉(zhuǎn)義字符:非法的XML字符必須被替換為實體引用(entityreference)。
???????? CDATA指的是不應由XML解析器進行解析的文本數(shù)據(jù)(Unparsed Character Data)。CDATA部分中的所有內(nèi)容都會被解析器忽略。CDATA部分由”<![CDATA[”開始,由”]]>”結束。CDATA部分不能包含字符串”]]>”,也不允許嵌套的CDATA部分。標記CDATA部分結尾的”]]>”不能包含空格或折行。
19、XML編碼:XML文檔可以包含非ASCII字符,比如法語。為了避免錯誤,需要規(guī)定XML編碼,或者將XML文檔存為Unicode。
???????? 編碼屬性應當被指定為文檔被保存時所使用的編碼。避免錯誤的建議是:(1)、使用支持編碼的編輯器;(2)、確定編輯器使用的編碼;(3)、在你的XML文檔中使用相同的編碼屬性。
20、服務器上的XML:XML文件是類似HTML文件的純文本文件。能夠通過標準的web服務器輕松地存儲和生成XML。
???????? XML文件在Internet服務器上進行存儲的方式與HTML文件完全相同。
???????? 通過ASP生成XML:XML可在不安裝任何XML軟件的情況下載服務器端生成。
???????? 通過PHP生成XML。
???????? 從數(shù)據(jù)庫獲取XML:XML可在不安裝任何XML軟件的情況下從數(shù)據(jù)庫生成。
???????? 在服務器上通過XSLT轉(zhuǎn)換XML。
???????? 通過ASP把XML保存為文件。
示例:
<?xml version="1.0" encoding="UTF-8"?>
<!-- 每個XML文檔都由XML序言開始,告訴解析器或瀏覽器這個文件應該按照XML規(guī)則進行解析 --><!-- XML test -->
<!-- XML文檔必須有一個元素是所有其他元素的父元素,該元素稱為根元素 -->
<!-- 任何XML文檔都只能有一個跟元素。根元素里面,可以有子元素,子元素里面可以有子子元素,以此類推 -->
<NOTE><!1-- 查看XML文件 -->
<!-- XML標簽沒有被預定義,你需要自行定義標簽。XML被設計為具有自我描述性 -->
<breakfast_menu><food><name>Belgian Waffles</name><price>$5.95</price><description>two of our famous Belgian Waffles with plenty of real maple syrup</description><calories>650</calories></food><food><name>Strawberry Belgian Waffles</name><price>$7.95</price><description>light Belgian waffles covered with strawberries and whipped cream</description><calories>900</calories></food>
</breakfast_menu><!-- 通過使用CSS,可為XML文檔添加顯示信息 -->
<!-- XML和CSS --><!-- 使用XSLT的方法之一是在瀏覽器顯示XML文件之前,先把它轉(zhuǎn)換為HTML -->
<!-- XML和XSLT --><!-- 通過JavaScript來解析XML --><!-- XML to HTML --><!-- XMLHttpRequest對象用于在后臺與服務器交換數(shù)據(jù) -->
<!-- 使用 XMLHttpRequest 對象 --><!-- 使用命名空間:XML命名空間提供避免元素命名沖突的方法,針對多個文檔 -->
<Blog xmlns="http://blog.csdn.net/fengbingchun"><Category><Android>8</Andorid><OpenCV>70</Andorid></Category>
</Blog><!-- XML CDATA -->
<!-- CDATA指的是不應由XML解析器進行解析的文本數(shù)據(jù) -->
<fun>
<![CDATA[
funciton Add(a, b)
{return a + b;
}
]]>
</fun></NOTE>
以上內(nèi)容摘自:http://www.w3school.com.cn/xml/index.asp?
總結
- 上一篇: Cygwin的安装及在Android j
- 下一篇: XML解析简介及Xerces-C++简单