摘要:聲明語(yǔ)句是可選部分如果存在需要放在文檔的第一行所謂的文檔聲明就是告訴解析器當(dāng)前文檔格式版本號(hào)以及編碼格式。所有的元素都必須是成對(duì)閉合標(biāo)簽非閉合標(biāo)簽是非法的,解析器將報(bào)錯(cuò),不無(wú)正常解析標(biāo)簽對(duì)大小寫敏感必須頭尾標(biāo)簽一致。
前言
一直想系統(tǒng)性的學(xué)XML,就沒(méi)時(shí)間學(xué),今晚抽出幾個(gè)小時(shí)時(shí)間學(xué)完了XML。過(guò)幾天再過(guò)來(lái)看看,背一背應(yīng)該就差不多,記得東西較多,沒(méi)什么難理解的。
XML數(shù)據(jù)傳輸格式 第一章 XML概述 1.1 引入當(dāng)我們看到 XML 標(biāo)準(zhǔn)突飛猛進(jìn)的開發(fā)進(jìn)度,以及大批的軟件開發(fā)商采用這個(gè)標(biāo)準(zhǔn)的日新月異的速度時(shí),真的是不禁感嘆這真是令人嘆為觀止。
目前,XML 在 Web 中起到的作用不會(huì)亞于一直作為 Web 基石的 HTML。
XML 無(wú)所不在。XML 是各種應(yīng)用程序之間進(jìn)行數(shù)據(jù)傳輸?shù)淖畛S玫墓ぞ?,并且在信息存?chǔ)和描述領(lǐng)域變得越來(lái)越流行。
XML的主要用途有哪些?
1.程序之間的數(shù)據(jù)傳輸通訊(可以是跨語(yǔ)言傳輸)2.配置文件config.xml
3.存儲(chǔ)數(shù)據(jù),充當(dāng)小型數(shù)據(jù)庫(kù)
優(yōu)勢(shì):
規(guī)范數(shù)據(jù)格式,是數(shù)據(jù)具有結(jié)構(gòu)性,易讀易處理1.2 什么是XML
XML 指可擴(kuò)展標(biāo)記語(yǔ)言(eXtensible Markup Language),被設(shè)計(jì)用來(lái)傳輸和存儲(chǔ)數(shù)據(jù);XML 需要自行定義標(biāo)簽,且標(biāo)簽名稱具有自我描述性;XML 是 W3C 推薦的數(shù)據(jù)傳輸存放標(biāo)準(zhǔn)。
XML和HTML的區(qū)別?
1.html標(biāo)簽不能自定義,XML只能自定義標(biāo)簽。第二章 XML的基本語(yǔ)法 2.1 語(yǔ)法規(guī)則2.html語(yǔ)法要求不嚴(yán)格,xml對(duì)于語(yǔ)法的要求非常嚴(yán)格,標(biāo)簽必須是閉合的。
3.XML 被設(shè)計(jì)用來(lái)傳輸和存儲(chǔ)數(shù)據(jù),其焦點(diǎn)是數(shù)據(jù)內(nèi)容;HTML 被設(shè)計(jì)用來(lái)顯示數(shù)據(jù),其焦點(diǎn)是數(shù)據(jù)的外觀呈現(xiàn)。
1.XML 文檔必須有根元素,根元素是所有其他元素的父元素。
2.XML聲明語(yǔ)句是可選部分,如果存在需要放在文檔的第一行
所謂的文檔聲明就是告訴解析器當(dāng)前文檔格式、版本號(hào)以及編碼格式。
3.所有的 XML 元素都必須是成對(duì)閉合標(biāo)簽;非閉合標(biāo)簽是非法的,解析器將報(bào)錯(cuò),不無(wú)正常解析.
4.XML 標(biāo)簽對(duì)大小寫敏感,必須頭尾標(biāo)簽一致。
5.XML標(biāo)簽不允許有交叉嵌套,也就是父子標(biāo)簽關(guān)系不能交叉嵌套。
6.XML標(biāo)簽名不要使用特殊字符,盡量只用數(shù)字字母下劃線。
7.XML 中的注釋與HTML中注釋一個(gè)語(yǔ)法格式。
8.實(shí)體引用 & 特殊字符
在 XML 中,一些字符擁有特殊的意義,如果您把字符 "<" 放在 XML 元素中,會(huì)發(fā)生錯(cuò)誤,這是因?yàn)榻馕銎鲿?huì)把它當(dāng)作新元素的開始46 < 100 這樣會(huì)產(chǎn)生 XML 錯(cuò)誤;為了避免錯(cuò)誤,要用實(shí)體引用來(lái)代替特殊字符,格式與HTML中的實(shí)體字符用法一樣
實(shí)體引用 | 實(shí)體字符 | 含義 |
---|---|---|
< | < | 小于-less than |
> | > | 大于-greater than |
& | & | 與--ampersand |
&apos | " | 單引號(hào)-apostrophe |
" | " | 雙引號(hào)-quotation mark |
XML 元素中,可以隨意添加一個(gè)或多個(gè)屬性,前提是
屬性值一定要用引號(hào)(單引號(hào)或雙引號(hào))引起來(lái)屬性名稱的命名規(guī)范與元素的命名規(guī)范相同
元素中的屬性是不允許重復(fù)的
屬性也是用來(lái)存儲(chǔ)數(shù)據(jù)信息的但實(shí)際開發(fā)經(jīng)驗(yàn)是 在HTML中,屬性用起來(lái)很便利,而在 XML 中,應(yīng)該盡量避免使用屬性,原因是
1.一個(gè)屬性不能包含多個(gè)值(元素可以)2.屬性值不能是結(jié)構(gòu)化數(shù)據(jù)(元素可以)
3.屬性不容易擴(kuò)展(為未來(lái)的變化)
4.屬性難以閱讀和維護(hù)。
總結(jié):將數(shù)據(jù)放在屬性中和放在子元素中,目的都是為了傳輸數(shù)據(jù),而子元素更加容易被解析,更好維護(hù),更便于引用。
2.3 CDATA要處理大量特殊字符時(shí),不能再用實(shí)體引用來(lái)處理了(主要是太麻煩,工作量大)可以使用CDATA將數(shù)據(jù)包裹就可以按原格式輸出。
格式:5,問(wèn):c和d那個(gè)更好看? ]]>
實(shí)體引用和CDATA的使用時(shí)機(jī):
1.對(duì)于內(nèi)容比較少的情況,可以使用實(shí)體引用對(duì)特殊字符進(jìn)行直接替換操作。第三章 使用PHP解析XML文檔2.對(duì)于內(nèi)容比較多的情況,建議采用CDATA區(qū)段。
在PHP5版本以后,其提供了一個(gè)非常非常強(qiáng)大的類庫(kù),SimpleXML類庫(kù),專門用于實(shí)現(xiàn)對(duì)XML文檔的解析操作。PHP中使用這個(gè)類庫(kù)來(lái)處理XML數(shù)據(jù)。3.1 XML解析原理
XML在解析時(shí)一共要經(jīng)歷三個(gè)步驟:
3.2 SimpleXML類庫(kù)讀取XML文檔到內(nèi)存
2.形成DOM樹結(jié)構(gòu)(DOM樹可以簡(jiǎn)單理解文檔的父子結(jié)構(gòu))
3.生成SimpleXML對(duì)象
語(yǔ)法:simplexml_load_file("test.xml");
aklman 20 男 ak 22
$xml=simplexml_load_file("test.xml");//引入文件并讀取 var_dump($xml);//輸出,輸出個(gè)格式就是一個(gè)對(duì)象
1.如果當(dāng)前讀取的節(jié)點(diǎn)是對(duì)象就通過(guò)->來(lái)進(jìn)行訪問(wèn);3.3 遍歷XML數(shù)據(jù)2.如果當(dāng)前讀取的節(jié)點(diǎn)是數(shù)組就通過(guò)[]來(lái)進(jìn)行訪問(wèn);
1.foreach循環(huán)遍歷
$xml=simplexml_load_file("test.html); foreach($xml->man as $v){ echo "Name:".$v->name."Age:".$v->age."
"; }
2.for循環(huán)遍歷
$xml=simplexml_load_file("test.html); $length=count($xml); for($i=0;$i<$length;$i++){ echo $xml->man[$i]->name; }
讀取節(jié)點(diǎn)的屬性時(shí)XML屬性要加到父節(jié)點(diǎn),PHP才能解析
$xml=simplexml_load_file("test.xml"); echo $xml->man[1]->attributes()->sex; //attributes()方法是用來(lái)獲取節(jié)點(diǎn)屬性, //內(nèi)存中節(jié)點(diǎn)屬性存放在attributes中,它是一個(gè)以為數(shù)組,可以使用attributes()方法獲取3.4 使用SImpleXML增加節(jié)點(diǎn)
$xml=simplexml_load_file("test.html); $man= //創(chuàng)建添加子節(jié)點(diǎn) $man = $xml->addChild("man"); //為節(jié)點(diǎn)添加屬性 $man->addAttribute("sex","女"); //創(chuàng)建添加子節(jié)點(diǎn)及節(jié)點(diǎn)值 $man->addChild("name","aklman"); $man->addChild("age","23"); var_dump($xml);//打印,已經(jīng)添加到內(nèi)存 $xml->asXML("test1.xml");//保存數(shù)據(jù)進(jìn)XML文件,沒(méi)有文件,則創(chuàng)建;3.5 案例
查詢手機(jī)歸屬地案例,數(shù)據(jù)來(lái)源聚合網(wǎng)
//接受前臺(tái)提交的數(shù)據(jù) $tel = $_GET["num"]; //組裝請(qǐng)求地址 $url = "http://v.juhe.cn/telephone/index?telephoneNumber=".$tel."&dtype=xml&format=&key=810c3b2c488bc37d5f521196d8799a7211";//地址已經(jīng)打亂了,需要從聚合網(wǎng)購(gòu)買 //發(fā)送請(qǐng)求并接受返回的數(shù)據(jù) $s = file_get_contents($url); // echo $s; //打印返回的XML數(shù)據(jù) //使用 simplexml_load_string 函數(shù)讀入并解析XML數(shù)據(jù) $xml = simplexml_load_string($s); //找到并打印我們想要的數(shù)據(jù) echo "歸屬?。?.$xml->result->place->city111."第四章 Xpath語(yǔ)言 4.1 概述
"; echo "歸屬城市:".$xml->result->place->city."
";
XPath是一門在 XML 文檔中查找信息的語(yǔ)言,XPath可用來(lái)在 XML 文檔中對(duì)元素和屬性進(jìn)行遍歷。4.2 使用及語(yǔ)法
使用注意事項(xiàng):
1.使用絕對(duì)路徑實(shí)現(xiàn)數(shù)據(jù)查詢
$xml = simplexml_load_file("user.xml"); //按節(jié)點(diǎn)的絕對(duì)路徑查找 $data = $xml->xpath("/user/man/name");//返回?cái)?shù)組 foreach($data as $v){ echo $v."
"; } /* *如果路徑以斜線 / 開始, 那么該路徑就表示到一個(gè)元素的絕對(duì)路徑, *絕對(duì)路徑實(shí)現(xiàn)數(shù)據(jù)查詢必須一級(jí)一級(jí)的查詢下去,不能越級(jí)。 */
2.使用相對(duì)路徑實(shí)現(xiàn)數(shù)據(jù)查詢
$xml = simplexml_load_file("user.xml"); //按節(jié)點(diǎn)的相對(duì)路徑查找 $data = $xml->xpath("http://name");//返回?cái)?shù)組 foreach($data as $v){ echo $v."
"; } /* *如果路徑以雙斜線 // 開頭, 則表示選擇文檔中所有滿足雙斜線//之后規(guī)則的元素(無(wú)論層級(jí)關(guān)系) */
3.使用*來(lái)匹配所有節(jié)點(diǎn)
$xml = simplexml_load_file("user.xml"); //匹配man節(jié)點(diǎn)下的所有元素節(jié)點(diǎn)。 $data = $xml->xpath("http://man/*");//返回?cái)?shù)組 foreach($data as $v){ echo $v."
"; }
4.使用[]方括號(hào)的形式來(lái)實(shí)現(xiàn)數(shù)據(jù)查詢
$xml = simplexml_load_file("user.xml"); //匹配man節(jié)點(diǎn)下的最后一個(gè)節(jié)點(diǎn)。 $data = $xml->xpath("http://man[last()]");//返回?cái)?shù)組 var_dump($data); echo $data[0]->name; //man[1] : 獲取第一個(gè)man元素 //man[last()]:獲取最后一個(gè)man元素 //man[age > 200] :獲取age>200的man節(jié)點(diǎn) /* *方塊號(hào)里的表達(dá)式可以進(jìn)一步的指定元素, 其中數(shù)字表示元素在選擇集里的位置 *默認(rèn)從1開始,而last()函數(shù)則表示選擇集中的最后一個(gè)元素,括號(hào)內(nèi)還可以放置表達(dá)式 */
5.使用屬性來(lái)獲取元素
$xml = simplexml_load_file("user.xml"); //匹配man節(jié)點(diǎn)下含有sex屬性的節(jié)點(diǎn)。 $data = $xml->xpath("http://man[@sex]");//返回?cái)?shù)組 var_dump($data); echo $data[0]->name;參考資料
W3school
菜鳥教程
XML編程與應(yīng)用教程(第2版)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/51974.html
摘要:聲明語(yǔ)句是可選部分如果存在需要放在文檔的第一行所謂的文檔聲明就是告訴解析器當(dāng)前文檔格式版本號(hào)以及編碼格式。所有的元素都必須是成對(duì)閉合標(biāo)簽非閉合標(biāo)簽是非法的,解析器將報(bào)錯(cuò),不無(wú)正常解析標(biāo)簽對(duì)大小寫敏感必須頭尾標(biāo)簽一致。 前言 一直想系統(tǒng)性的學(xué)XML,就沒(méi)時(shí)間學(xué),今晚抽出幾個(gè)小時(shí)時(shí)間學(xué)完了XML。過(guò)幾天再過(guò)來(lái)看看,背一背應(yīng)該就差不多,記得東西較多,沒(méi)什么難理解的。 XML數(shù)據(jù)傳輸格式 第一...
摘要:以指定模式分割字符串,返回結(jié)果為數(shù)組。為什么牢記,有什么用看代碼查找連續(xù)的相同的數(shù)字或者內(nèi)容是用子表達(dá)式只有字表達(dá)是中匹配的內(nèi)容才保存到緩存,這種行為叫捕獲。 前言 正則表達(dá)式之所以強(qiáng)大,是因?yàn)槠淠軐?shí)現(xiàn)模糊匹配,精確匹配沒(méi)有任何價(jià)值。 正則表達(dá)式學(xué)習(xí)筆記 第一章 JavaScript原型對(duì)象與原型鏈 1.1 正則表達(dá)式概念 RegExp:是正則表達(dá)式(regular expressio...
摘要:比較運(yùn)算符,操作數(shù)都不是類型時(shí)操作數(shù)中只有類型和類型,或者其中有一個(gè)是轉(zhuǎn)換為運(yùn)算條件運(yùn)算轉(zhuǎn)換為號(hào)運(yùn)算,其中一個(gè)操作符為字符串比較運(yùn)算,其中一個(gè)操作符為字符串 要求:學(xué)習(xí),并背誦全文 原始值 類型 Undefined Null String Boolean Number 值 undefined null 所有字符串 true false 所有數(shù)字/NaN 引用類型 Objec...
摘要:學(xué)習(xí)筆記工作以來(lái)就一直在用各種框架,比如,這些,向外提供接口都很方便,但是一直在想它的內(nèi)部是怎樣對(duì)外暴露服務(wù)的,正好之前學(xué)習(xí)基礎(chǔ)的時(shí)候也沒(méi)好好看這塊,抽個(gè)時(shí)間學(xué)習(xí)總結(jié)一下,也能更好的理解掌握現(xiàn)在的框架。 Servlet學(xué)習(xí)筆記 工作以來(lái)就一直在用各種web框架,比如SpringMVC,Spring Cloud這些,向外提供接口都很方便,但是一直在想它的內(nèi)部是怎樣對(duì)外暴露服務(wù)的,正好之前...
摘要:實(shí)戰(zhàn)高并發(fā)程序設(shè)計(jì)推薦豆瓣評(píng)分書的質(zhì)量沒(méi)的說(shuō),推薦大家好好看一下。推薦,豆瓣評(píng)分,人評(píng)價(jià)本書介紹了在編程中條極具實(shí)用價(jià)值的經(jīng)驗(yàn)規(guī)則,這些經(jīng)驗(yàn)規(guī)則涵蓋了大多數(shù)開發(fā)人員每天所面臨的問(wèn)題的解決方案。 很早就想把JavaGuide的書單更新一下了,昨晚加今天早上花了幾個(gè)時(shí)間對(duì)之前的書單進(jìn)行了分類和補(bǔ)充完善。雖是終極版,但一定還有很多不錯(cuò)的 Java 書籍我沒(méi)有添加進(jìn)去,會(huì)繼續(xù)完善下去。希望這篇...
閱讀 3189·2021-09-28 09:36
閱讀 3723·2021-09-08 09:45
閱讀 1865·2021-09-01 10:43
閱讀 3511·2019-08-30 12:44
閱讀 3382·2019-08-29 17:25
閱讀 1398·2019-08-29 11:03
閱讀 2017·2019-08-26 13:36
閱讀 723·2019-08-23 18:24