1、XML數(shù)據(jù)格式用途
1、用作配置文件:數(shù)據(jù)庫配置、項(xiàng)目配置、應(yīng)用程序配置等,例如使用Netbeans創(chuàng)建項(xiàng)目時(shí) 會(huì)自動(dòng)生成一個(gè)nbproject目錄 該目錄中使用了xml文件存儲(chǔ)項(xiàng)目相關(guān)信息。
2、xml格式的數(shù)據(jù)具有通用性,絕大多數(shù)語言均支持對(duì)XML數(shù)據(jù)的解析 因此被用于不同語言之間 交換數(shù)據(jù)。
3、作為開放平臺(tái)接口返回的數(shù)據(jù) 比如微信
2、XML數(shù)據(jù)文件格式
文件擴(kuò)展名: .xml
<?xml version="1.0" encoding="UTF-8"?>
<fu>
<title>
1、XML支持且必須是用戶自定義標(biāo)簽
2、XML標(biāo)簽沒有顯示樣式 使用不同的標(biāo)簽是為了區(qū)分不同類型的數(shù)據(jù)(區(qū)分?jǐn)?shù)據(jù))
3、XML語法嚴(yán)謹(jǐn),標(biāo)簽必須關(guān)閉
4、XML標(biāo)簽區(qū)分大小寫
5、XML標(biāo)簽只能嵌套(<p><b>some text</b></p>) 不能交叉(<p><b></p></b>)
6、XML標(biāo)簽可以有屬性 但屬性必須有值 且用單雙引號(hào)括起來 否則解析出錯(cuò)
7、當(dāng)XML標(biāo)簽中的內(nèi)容含有特殊字符(<、>、’、”)時(shí) 為避免解析時(shí)的歧義 需要使用字符實(shí)體替代(<$gt;&©),當(dāng)內(nèi)容較多時(shí) 可以將它們放入CDATA(character data)段中 表示這是一段字符數(shù)據(jù) 不要當(dāng)成標(biāo)簽來解析。
<item><<靜夜思>></item>
<content>
<![CDATA[<p>窗前明月光</p>
<p>疑是地上霜</p>
<p>舉頭望明月</p>
<p>低頭思故鄉(xiāng)</p>
]]>
</content>
</title>
</fu>
3、PHP解析XML
1、SimpleXMLElement php內(nèi)置的一個(gè)工具用來解析xml格式的數(shù)據(jù),舉例
創(chuàng)建test.php文件
<?php
$data = "<?xml version='1.0' encoding='UTF-8'?>
<root>
<title data='靜夜思'>
<content>
<![CDATA[<p>窗前明月光</p>
<p>疑是地上霜</p>
<p>舉頭望明月</p>
<p>低頭思故鄉(xiāng)</p>
]]>
</content>
</title>
<title data='獨(dú)坐敬亭山'>
<content>
<![CDATA[<p>眾鳥高飛盡</p>
<p>孤云獨(dú)去閑</p>
<p>相看兩不厭</p>
<p>只有敬亭山</p>
]]>
</content>
</title>
</root>";
$obj = new 1、SimpleXMLElement($data);
//$obj = simplexml_load_string($data);
//$obj = simplexml_load_file(1.xml);
//相當(dāng)于$data = file_get_contents(1.xml); $obj = simplexml_load_string($data);
//var_dump($obj);//$obj 就指向root根
echo "第一首詩的名字是" . $obj->title[0]->attribtes()->data;
4、xpath節(jié)點(diǎn)查詢,返回集合形式;
1、使用/設(shè)置絕對(duì)路徑的表達(dá)式
$path = "/root/title";
$result = $obj->xpath($path);
var_dump($result); //返回兩個(gè)title集合,可以通過下標(biāo)讀取
2、使用//全局查找 不考慮位置
$path = "http://title";
$result = $obj->xpath($path);
var_dump($result);
3、使用.. 選取父節(jié)點(diǎn)
$path = "http://title..";
4、使用[]過濾節(jié)點(diǎn)
$path = "http://title[1]";
5、使用@過濾屬性
$path = "http://user[@data='靜夜思']";
5、xml數(shù)據(jù)增刪改
添加
$node->addChild(); 向node節(jié)點(diǎn)添加子節(jié)點(diǎn)
$obj->addChild("blackground","你是我的小蘋果");
$obj->saveXML("1.xml");
$content = $obj->xpath("http://title");
$content[0]->addChild("foo","some text");
$obj->saveXML("1.xml");
刪除
unset($obj->content->foo); 刪除foo數(shù)據(jù)
$obj->saveXML("1.xml");
修改 重新復(fù)制
$obj->author = "李太白"; 重新復(fù)制即可
$obj->saveXML=("1.xml");