XML基礎XML概念
XML (EXtensible Markup Language)指可擴展標記語言,XML 被設計用來傳輸和存儲數據。
沒有任何行為的 XML也許這有點難以理解,但是 XML 不會做任何事情。XML 被設計用來結構化、存儲以及傳輸信息。
下面是 John 寫給 George 的便簽,存儲為 XML:
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
上面的這條便簽具有自我描述性。它擁有標題以及留言,同時包含了發送者和接受者的信息,XML 標簽沒有被預定義,需要自行定義標簽。
這個 XML 文檔仍然沒有做任何事情。它僅僅是包裝在 XML 標簽中的純粹的信息。我們需要編寫軟件或者程序,才能傳送、接收和顯示出這個文檔。
用途(作用)XML 應用于 web 開發的許多方面,常用于簡化數據的存儲和共享。
· XML 把數據從 HTML 分離
· XML 簡化數據共享
· 簡化數據傳輸
· 簡化平臺的變更
· 使您的數據更有用
語法(規則)所有 XML 元素都須有關閉標簽標簽對大小寫敏感XML 標簽對大小寫敏感。在 XML 中,標簽 <Letter> 與標簽 <letter> 是不同的。
必須使用相同的大小寫來編寫打開標簽和關閉標簽:
<Message>這是錯誤的。</message>
<message>這是正確的。</message>
XML 必須正確地嵌套在 HTML 中,常會看到沒有正確嵌套的元素,下述語句是錯誤的。
<b><i>This text is bold and italic</b></i>
在 XML 中,所有元素都必須彼此正確地嵌套:
<b><i>This text is bold and italic</i></b>
XML 文檔必須有根元素XML 文檔必須有一個元素是所有其他元素的父元素。該元素稱為根元素。
<root>
<child>
<subchild>.....</subchild>
</child>
</root>
XML 的屬性值須加引號與 HTML 類似,XML 也可擁有屬性(名稱/值的對)。
在 XML 中,XML 的屬性值須加引號。請研究下面的兩個 XML 文檔。第一個是錯誤的,第二個是正確的:
<note date=08/08/2008>
<to>George</to>
<from>John</from>
</note>
<note date="08/08/2008">
<to>George</to>
<from>John</from>
</note>
在第一個文檔中的錯誤是,note 元素中的 date 屬性沒有加引號。
XML 中的注釋在 XML 中編寫注釋的語法與 HTML 的語法很相似:
<!-- This is a comment -->
XML樹結構XML 文檔形成一種樹結構
XML 文檔必須包含根元素。該元素是所有其他元素的父元素。
XML 文檔中的元素形成了一棵文檔樹。這棵樹從根部開始,并擴展到樹的最底端。
所有元素均可擁有子元素。
上圖表示下面的 XML 中的一本書:
例子中的根元素是 <bookstore>。
文檔中的所有 <book> 元素都被包含在 <bookstore> 中。
<book> 元素有 4 個子元素:<title>、< author>、<year>、<price>。
XML元素XML 元素指的是從(且包括)開始標簽直到(且包括)結束標簽的部分。
元素可包含其他元素、文本或者兩者的混合物。元素也可以擁有屬性。
在上例中,<bookstore> 和 <book> 都擁有元素內容,因為它們包含了其他元素。<author> 只有文本內容,因為它僅包含文本。
在上例中,只有 <book> 元素擁有屬性 (category="CHILDREN")。
XML 屬性屬性通常提供不屬于數據組成部分的信息。在下面的例子中,文件類型與數據無關,但是對需要處理這個元素的軟件來說卻很重要:
<file type="gif">computer.gif</file>
元素與屬性的選擇和應用下面的三個 XML 文檔包含完全相同的信息:
方法一:使用 date 屬性
<note date="08/08/2008">
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
方法二:使用了date 元素
<note>
<date>08/08/2008</date>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
方法三:使用擴展的 date 元素
<note>
<date>
<day>08</day>
<month>08</month>
<year>2008</year>
</date>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
形式良好的 XML 文檔"形式良好"或"結構良好"的 XML 文檔擁有正確的語法。
"形式良好"(Well Formed)的 XML 文檔會遵守前幾章介紹過的 XML 語法規則:
· XML 文檔必須有根元素
· XML 文檔必須有關閉標簽
· XML 標簽對大小寫敏感
· XML 元素必須被正確的嵌套
· XML 屬性必須加引號
<?xml version="1.0" encoding="UTF-8" ?>
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
查看 XML 文件通過右擊瀏覽器,查看頁面源代碼的方式,查看XML文件。
XML實例1. 用XML表示中國部分省市數據源碼:
<?xml version="1.0" encoding="utf-8"?>
<country>
<name>中國</name>
<province>
<name>黑龍江</name>
<cities>
<city>哈爾濱</city>
<city>大慶</city>
</cities>
</province>
<province>
<name>廣東</name>
<cities>
<city>廣州</city>
<city>深圳</city>
<city>珠海</city>
</cities>
</province>
<province>
<name>臺灣</name>
<cities>
<city>臺北</city>
<city>高雄</city>
</cities>
</province>
<province>
<name>新疆</name>
<cities>
<city>烏魯木齊</city>
</cities>
</province>
</country>
XML高級所有 XML 文檔中的文本均會被解析器解析。
只有 CDATA 區段(CDATA ction)中的文本會被解析器忽略。
1. PCDATAPCDATA 指的是被解析的字符數據(Pard Character Data)。
XML 解析器通常會解析 XML 文檔中所有的文本。
當某個 XML 元素被解析時,其標簽之間的文本也會被解析:
<message>此文本也會被解析</message>
解析器之所以這么做是因為 XML 元素可包含其他元素,就像這個例子中,其中的 <name> 元素包含著另外的兩個元素(first 和 last):
<name><first>Bill</first><last>Gates</last></name>
而解析器會把它分解為像這樣的子元素:
<name>
<first>Bill</first>
<last>Gates</last>
</name>
CDATA術語 CDATA 指的是不應由 XML 解析器進行解析的文本數據(Unpard Character Data)。
在 XML 元素中,"<" 和 "&" 是非法的。
"<" 會產生錯誤,因為解析器會把該字符解釋為新元素的開始。
"&" 也會產生錯誤,因為解析器會把該字符解釋為字符實體的開始。
某些文本,比如 JavaScript 代碼,包含大量 "<" 或 "&" 字符。為了避免錯誤,可以將腳本代碼定義為 CDATA。
CDATA 部分中的所有內容都會被解析器忽略。
CDATA 部分由 "<![CDATA[" 開始,由 "]]>" 結束:
<script>
<![CDATA[
function matchwo(a,b)
{
if (a < b && a < 0) then
{
return 1;
}
el
{
return 0;
}
}
]]>
</script>
在上面的例子中,解析器會忽略 CDATA 部分中的所有內容。
PHP操作XML——DOMDocument1. 創建和解析XMLDOMDocument還是PHP5后推出的DOM擴展的一部分,可用來建立或解析html/xml,目前只支持utf-8編碼。
1) 創建DOMDocument對象,加載xml文件(load)
2) 獲取節點,返回DomNodeList對象
3) 根據索引獲取節點元素,返回DomElement對象
4) 獲取節點值
5) 遍歷節點集合(DOMNodeList對象),獲取節點值XML文檔的解析
6) 獲取節點屬性
使用loadXML方法加載含有xml數據的字符串
服務器端返回XML1. 后臺PHP程序,響應前端ajax請求,返回xml格式數據。前端程序,發送ajax請求,獲取數據,輸出節點值· 客戶端接收到的數據是XMLDocument對象。
· 節點值
PHP操作XML——simpleXMLSimpleXML是PHP5后提供的一套簡單易用的xml工具集,可以把xml轉換成方便處理的對象,也可以組織生成xml數據。
1. 通過字符串構建XML對象案例從數據庫中讀取數據,在PHP中使用simpleXML構建XML格式數據,生成XML文件。
生成的messages.xml文件內容
查看源代碼
json與xml區別1. 可讀性JSON和的可讀性可謂不相上下,一邊是簡易的語法,一邊是規范的標簽形式,很難分出勝負。
可擴展性XML天生有很好的擴展性,JSON當然也有,沒有什么是XML可以擴展而JSON卻不能擴展的。不過JSON在Javascript主場作戰,可以存儲Javascript復合對象,有著xml不可比擬的優勢。
編碼難度XML有豐富的,比如Dom4j、JDom等,JSON也有提供的工具。無工具的情況下,相信熟練的開發人員一樣能很快的寫出想要的xml文檔和JSON串,不過,xml文檔要多很多結構上的字符。
解碼難度的解析方式有兩種:
一是通過文檔模型解析,也就是通過父標簽索引出一組標記。例如:xmlData.getElementsByTagName("tagName"),但是這樣是要在預先知道文檔結構的情況下使用,無法進行通用的封裝。
另外一種方法是遍歷節點(document 以及 childNodes)。這個可以通過來實現,不過解析出來的數據仍舊是形式各異,往往也不能滿足預先的要求。
凡是這樣可擴展的結構數據解析起來一定都很困難。
JSON也同樣如此。如果預先知道JSON結構的情況下,使用JSON進行數據傳遞簡直是太美妙了,可以寫出很實用美觀可讀性強的代碼。如果你是純粹的前臺開發人員,一定會非常喜歡JSON。但是如果你是一個應用開發人員,就不是那么喜歡了,畢竟xml才是真正的結構化,用于進行數據傳遞。
而如果不知道JSON的結構而去解析JSON的話,那簡直是噩夢。費時費力不說,代碼也會變得冗余拖沓,得到的結果也不盡人意。但是這樣也不影響眾多前臺開發人員選擇JSON。因為json.js中的toJSONString()就可以看到JSON的字符串結構。當然不是使用這個字符串,這樣仍舊是噩夢。常用JSON的人看到這個字符串之后,就對JSON的結構很明了了,就更容易的操作JSON。
以上是在Javascript中僅對于數據傳遞的xml與JSON的解析。在Javascript地盤內,JSON畢竟是主場作戰,其優勢當然要遠遠優越于xml。如果JSON中存儲Javascript復合對象,而且不知道其結構的話,我相信很多程序員也一樣是哭著解析JSON的。
除了上述之外,JSON和XML還有另外一個很大的區別在于有效數據率。JSON作為數據包格式傳輸的時候具有更高的效率,這是因為JSON不像XML那樣需要有嚴格的閉合標簽,這就讓有效數據量與總數據包比大大提升,從而減少同等數據流量的情況下,網絡的傳輸壓力[2] 。
實例比較XML和JSON都使用結構化方法來標記數據。
用XML表示中國部分省市數據如下:
用JSON表示:
本文發布于:2023-02-28 20:02:00,感謝您對本站的認可!
本文鏈接:http://www.newhan.cn/zhishi/a/167765034274369.html
版權聲明:本站內容均來自互聯網,僅供演示用,請勿用于商業和其他非法用途。如果侵犯了您的權益請與我們聯系,我們將在24小時內刪除。
本文word下載地址:xml教程(xml教程視頻).doc
本文 PDF 下載地址:xml教程(xml教程視頻).pdf
| 留言與評論(共有 0 條評論) |