XML學習筆記--背誦版

前言

一直想系統性的學XML,就沒時間學,今晚抽出幾個小時時間學完了XML。過幾天再過來看看,背一背應該就差很少,記得東西較多,沒什麼難理解的。php

XML數據傳輸格式

第一章 XML概述

1.1 引入

當咱們看到 XML 標準日新月異的開發進度,以及大批的軟件開發商採用這個標準的突飛猛進的速度時,真的是不由感嘆這真是使人歎爲觀止。html

目前,XML 在 Web 中起到的做用不會亞於一直做爲 Web 基石的 HTML。數據庫

XML 無所不在。XML 是各類應用程序之間進行數據傳輸的最經常使用的工具,而且在信息存儲和描述領域變得愈來愈流行。編程

XML的主要用途有哪些?數組

1.程序之間的數據傳輸通信(能夠是跨語言傳輸)

2.配置文件config.xmlless

3.存儲數據,充當小型數據庫函數

優點:工具

規範數據格式,是數據具備結構性,易讀易處理

1.2 什麼是XML

XML 指可擴展標記語言(eXtensible Markup Language),被設計用來傳輸和存儲數據;XML 須要自行定義標籤,且標籤名稱具備自我描述性;XML 是 W3C 推薦的數據傳輸存放標準。post

XML和HTML的區別?編碼

1.html標籤不能自定義,XML只能自定義標籤。

2.html語法要求不嚴格,xml對於語法的要求很是嚴格,標籤必須是閉合的。

3.XML 被設計用來傳輸和存儲數據,其焦點是數據內容;HTML 被設計用來顯示數據,其焦點是數據的外觀呈現。

第二章 XML的基本語法

2.1 語法規則

1.XML 文檔必須有根元素,根元素是全部其餘元素的父元素。

2.XML聲明語句是可選部分,若是存在須要放在文檔的第一行

所謂的文檔聲明就是告訴解析器當前文檔格式、版本號以及編碼格式。

3.全部的 XML 元素都必須是成對閉合標籤;非閉合標籤是非法的,解析器將報錯,不無正常解析.

4.XML 標籤對大小寫敏感,必須頭尾標籤一致。

5.XML標籤不容許有交叉嵌套,也就是父子標籤關係不能交叉嵌套。

6.XML標籤名不要使用特殊字符,儘可能只用數字字母下劃線。

7.XML 中的註釋與HTML中註釋一個語法格式。

8.實體引用 & 特殊字符

在 XML 中,一些字符擁有特殊的意義,若是您把字符 "<" 放在 XML 元素中,會發生錯誤,這是由於解析器會把它看成新元素的開始 <age>46 < 100 </age>這樣會產生 XML 錯誤;

爲了不錯誤,要用實體引用來代替特殊字符,格式與HTML中的實體字符用法同樣

實體引用 實體字符 含義
&lt < 小於-less than
&gt > 大於-greater than
&amp & 與--ampersand
&apos ' 單引號-apostrophe
&quot " 雙引號-quotation mark

2.2 元素屬性

XML 元素中,能夠隨意添加一個或多個屬性,前提是

屬性值必定要用引號(單引號或雙引號)引發來

屬性名稱的命名規範與元素的命名規範相同

元素中的屬性是不容許重複的

屬性也是用來存儲數據信息的但實際開發經驗是 在HTML中,屬性用起來很便利,而在 XML 中,應該儘可能避免使用屬性,緣由是

1.一個屬性不能包含多個值(元素能夠)

2.屬性值不能是結構化數據(元素能夠)

3.屬性不容易擴展(爲將來的變化)

4.屬性難以閱讀和維護。

總結:將數據放在屬性中和放在子元素中,目的都是爲了傳輸數據,而子元素更加容易被解析,更好維護,更便於引用。

2.3 CDATA

要處理大量特殊字符時,不能再用實體引用來處理了(主要是太麻煩,工做量大)可使用CDATA將數據包裹就能夠按原格式輸出。

格式: <test><![CDATA[第一題題1:已知 c<4,d>5,問:c和d那個更好看? ]]> </test>

實體引用和CDATA的使用時機:

1.對於內容比較少的狀況,可使用實體引用對特殊字符進行直接替換操做。

2.對於內容比較多的狀況,建議採用CDATA區段。

第三章 使用PHP解析XML文檔

在PHP5版本之後,其提供了一個很是很是強大的類庫,SimpleXML類庫,專門用於實現對XML文檔的解析操做。PHP中使用這個類庫來處理XML數據。

3.1 XML解析原理

XML在解析時一共要經歷三個步驟:

  1. 讀取XML文檔到內存

2.造成DOM樹結構(DOM樹能夠簡單理解文檔的父子結構)

3.生成SimpleXML對象

3.2 SimpleXML類庫

語法:simplexml_load_file('test.xml');

<?xml version="1.0" encoding="UTF-8"?>
<user>
    <man>
    <name>aklman</name>
        <age>20</age>
            <sex>男</sex>
    </man>
    <man sex="男">
        <name>ak</name>
        <age>22</age>
    </man>
</user>
$xml=simplexml_load_file('test.xml');//引入文件並讀取
var_dump($xml);//輸出,輸出個格式就是一個對象
1.若是當前讀取的節點是對象就經過->來進行訪問;

2.若是當前讀取的節點是數組就經過[]來進行訪問;

3.3 遍歷XML數據

1.foreach循環遍歷
$xml=simplexml_load_file('test.html);
foreach($xml->man as $v){
    echo 'Name:'.$v->name.'Age:'.$v->age.'<br>';
}
2.for循環遍歷
$xml=simplexml_load_file('test.html);
$length=count($xml);
for($i=0;$i<$length;$i++){
    echo $xml->man[$i]->name;
}
讀取節點的屬性時XML屬性要加到父節點,PHP才能解析
$xml=simplexml_load_file('test.xml');
echo $xml->man[1]->attributes()->sex;
//attributes()方法是用來獲取節點屬性,
//內存中節點屬性存放在attributes中,它是一個覺得數組,可使用attributes()方法獲取

3.4 使用SImpleXML增長節點

$xml=simplexml_load_file('test.html);
$man=
//建立添加子節點
$man = $xml->addChild('man');
//爲節點添加屬性
$man->addAttribute('sex','女');
//建立添加子節點及節點值
$man->addChild('name','aklman');
$man->addChild('age','23');
var_dump($xml);//打印,已經添加到內存
$xml->asXML('test1.xml');//保存數據進XML文件,沒有文件,則建立;

3.5 案例

查詢手機歸屬地案例,數據來源聚合網
<form action="03.5.php" method="get">
    <input type="text" name="num"><br>
    <input type="submit" value="提交">
</form>
//接受前臺提交的數據
$tel = $_GET['num'];
//組裝請求地址
$url = 'http://v.juhe.cn/telephone/index?telephoneNumber='.$tel.'&dtype=xml&format=&key=810c3b2c488bc37d5f521196d8799a7211';//地址已經打亂了,須要從聚合網購買
//發送請求並接受返回的數據
$s = file_get_contents($url);
// echo $s; //打印返回的XML數據
//使用 simplexml_load_string 函數讀入並解析XML數據
$xml = simplexml_load_string($s);
//找到並打印咱們想要的數據
echo '歸屬省:'.$xml->result->place->city111.'<hr>';
echo '歸屬城市:'.$xml->result->place->city.'<hr>';

第四章 Xpath語言

4.1 概述

XPath是一門在 XML 文檔中查找信息的語言,XPath可用來在 XML 文檔中對元素和屬性進行遍歷。

4.2 使用及語法

使用注意事項:

1.使用絕對路徑實現數據查詢
$xml = simplexml_load_file('user.xml');
//按節點的絕對路徑查找
$data = $xml->xpath('/user/man/name');//返回數組
foreach($data as $v){
    echo $v.'<hr>';
}
/*
*若是路徑以斜線 / 開始, 那麼該路徑就表示到一個元素的絕對路徑,
*絕對路徑實現數據查詢必須一級一級的查詢下去,不能越級。
*/
2.使用相對路徑實現數據查詢
$xml = simplexml_load_file('user.xml');
//按節點的相對路徑查找
$data = $xml->xpath('//name');//返回數組
foreach($data as $v){
echo $v.'<hr>';
}
/*
*若是路徑以雙斜線 // 開頭, 則表示選擇文檔中全部知足雙斜線//以後規則的元素(不管層級關係)
*/
3.使用*來匹配全部節點
$xml = simplexml_load_file('user.xml');
//匹配man節點下的全部元素節點。
$data = $xml->xpath('//man/*');//返回數組
foreach($data as $v){
echo $v.'<hr>';
}
4.使用[]方括號的形式來實現數據查詢
$xml = simplexml_load_file('user.xml');
//匹配man節點下的最後一個節點。
$data = $xml->xpath('//man[last()]');//返回數組
var_dump($data);
echo $data[0]->name;
//man[1] : 獲取第一個man元素
//man[last()]:獲取最後一個man元素
//man[age > 200] :獲取age>200的man節點
/*
*方塊號裏的表達式能夠進一步的指定元素, 其中數字表示元素在選擇集裏的位置
*默認從1開始,而last()函數則表示選擇集中的最後一個元素,括號內還能夠放置表達式
*/
5.使用屬性來獲取元素
$xml = simplexml_load_file('user.xml');
//匹配man節點下含有sex屬性的節點。
$data = $xml->xpath('//man[@sex]');//返回數組
var_dump($data);
echo $data[0]->name;

參考資料

W3school
菜鳥教程
XML編程與應用教程(第2版)

相關文章
相關標籤/搜索