XML 是一個(gè)很實(shí)用的東西,存儲(chǔ)數(shù)據(jù),、交換數(shù)據(jù)都很方便,但如何對(duì) XML 進(jìn)行基本的操作呢,? 對(duì) XML 的操作包括創(chuàng)建 XML 文檔,,添加、查看、修改,、刪除數(shù)據(jù),,操作方法有很多種,可以使用 DOMDocument 類,、other,、other 等都可以實(shí)現(xiàn),本文介紹的是通過(guò) DOMDocument 類進(jìn)行操作,。 DOMDocument 類
注意:以上的屬性和方法只是此類的一部分,,比較常用和實(shí)用,,點(diǎn)此 查看全部 。 創(chuàng)建XML文檔說(shuō)明:創(chuàng)建XML文檔之前必須對(duì)XML有所了解,,本文不做贅述,,請(qǐng)參考相關(guān)知識(shí)。 PHP:create.php $XML=new DOMDocument("1.0","utf-8"); // 實(shí)例化一個(gè)對(duì)象,,并設(shè)置 XML 版本和編碼 $XML->formatOutput=true; // 格式化輸出,,保留縮進(jìn) $XML->preservaWhiteSpace=false; // 不保留空格,這個(gè)是輔助格式化輸出的 $root=$XML->createElement("Languages"); // 創(chuàng)建根節(jié)點(diǎn),,有且只能有一個(gè) $lang1=$XML->createElement("Lang","Chinese"); // 創(chuàng)建一個(gè)子節(jié)點(diǎn),,這是方法一 $lang1->setAttribute("id","1001"); // 設(shè)置子節(jié)點(diǎn)的屬性 $lang2=$XML->createElement("Lang"); // 創(chuàng)建一個(gè)子節(jié)點(diǎn),這是方法二 $lang2_text=$XML->createTextNode("English"); // 創(chuàng)建子節(jié)點(diǎn)的內(nèi)容 $lang2_Attr_n=$XML->createAttribute("id"); // 創(chuàng)建子節(jié)點(diǎn)的屬性名稱 $lang2_Attr_v=$XML->createTextNode("1002"); // 創(chuàng)建子節(jié)點(diǎn)的屬性內(nèi)容 $lang2_Attr_n->appendChild($lang2_Attr_v); // 將屬性內(nèi)容賦值給屬性名稱 $lang2->appendChild($lang2_text); // 為創(chuàng)建的空子節(jié)點(diǎn)添加內(nèi)容 $lang2->appendChild($lang2_Attr_n); // 為創(chuàng)建的空子節(jié)點(diǎn)添加屬性 $root->appendChild($lang1); // 添加子節(jié)點(diǎn),,不添加將不能顯示 $lang1 $root->appendChild($lang2); // 添加子節(jié)點(diǎn),,不添加將不能顯示 $lang2 $XML->appendChild($root); // 最重要的一步:將根節(jié)點(diǎn)添加到文檔里面 $XML->save("language.xml"); // 保存 XML 文檔,路徑是相對(duì)路徑 XML:language.xml <?xml version="1.0" encoding="utf-8"?> <Languages> <Lang id="1001">Chinese</Lang> <Lang id="1002">English</Lang> </Languages> 提示:如果不格式化輸出,,XML 將會(huì)顯示如下,。 <?xml version="1.0" encoding="utf-8"?> <Languages><Lang id="1001">Chinese</Lang><Lang id="1002">English</Lang></Languages> 讀取XML數(shù)據(jù)說(shuō)明:讀取 XML 數(shù)據(jù)是通過(guò)獲取 XML 中的節(jié)點(diǎn)然后再讀取里面的內(nèi)容的方式來(lái)實(shí)現(xiàn)的,獲取節(jié)點(diǎn)有兩種方法:getElementById() 和 getElementsByTagName(),。 ①. getElementById()XML:book.xml(打開)
PHP:read.php $XML=new DOMDocument("1.0","utf-8"); // 實(shí)例化一個(gè)對(duì)象,,并設(shè)置 XML 版本和編碼 $XML->validateOnParse=true; // 開啟驗(yàn)證,DTD 驗(yàn)證文檔格式 $XML->load("language.xml"); // 打開一個(gè) XML 文件 $langs=$XML->getElementById("b002"); // 獲取 id 為 "b002" 的節(jié)點(diǎn) echo $langs->nodeValue; // 輸出 《西游記》 注意?。,。。,。,。∵@個(gè)函數(shù)比較特殊,,需要注意以下幾點(diǎn): 第一:請(qǐng)仔細(xì)看 book.xml,,這個(gè)文檔是含有 DTD(文檔類型定義),,第 2-5 行,不然函數(shù)無(wú)法識(shí)別 ID,。 第二:再次觀看 book.xml,,元素屬性值必須以字母開頭,否則此函數(shù)會(huì)鬧情緒出現(xiàn)小錯(cuò)誤,。 第三:要想使用此函數(shù)必須開啟 XML 驗(yàn)證,,即將參數(shù) validateOnParse 設(shè)置為 true 。 ②. getElementsByTagName()XML:language.xml(打開)
PHP:read.php $XML=new DOMDocument("1.0","utf-8"); // 實(shí)例化一個(gè)對(duì)象,,并設(shè)置 XML 版本和編碼 $XML->load("language.xml"); // 打開一個(gè) XML 文件 $langs=$XML->getElementsByTagName("Lang"); // 通過(guò)標(biāo)簽名獲取指定的節(jié)點(diǎn)集合 $lang=$langs->item(1); // 通過(guò) item() 獲取指定節(jié)點(diǎn) echo $lang->nodeValue; // 顯示節(jié)點(diǎn)的文本內(nèi)容,,English 修改XML數(shù)據(jù)說(shuō)明:修改 XML 數(shù)據(jù)是通過(guò)獲取 XML 中的節(jié)點(diǎn)然后再對(duì)節(jié)點(diǎn)賦值的方式來(lái)實(shí)現(xiàn)的。 XML:media.xml(打開)
PHP:edit.php $XML=new DOMDocument("1.0","utf-8"); // 實(shí)例化一個(gè)對(duì)象,,并設(shè)置 XML 版本和編碼 $XML->load("language.xml"); // 打開一個(gè) XML 文件 $langs=$XML->getElementsByTagName("Lang"); // 通過(guò)標(biāo)簽名獲取指定的節(jié)點(diǎn)集合 $lang=$langs->item(1); // 通過(guò) item() 獲取指定節(jié)點(diǎn) $lang->nodeValue="Japanese"; // 為節(jié)點(diǎn)賦值,,Japanese $XML->save("language.xml"); // 親,記得保存 刪除XML數(shù)據(jù)說(shuō)明:刪除 XML 數(shù)據(jù)是通過(guò)獲取 XML 中的節(jié)點(diǎn)集合然后再移除子節(jié)點(diǎn)的方式來(lái)實(shí)現(xiàn)的,。 注意:在執(zhí)行刪除操作之前,,一定得弄清楚一點(diǎn),只有父節(jié)點(diǎn)才能刪除子節(jié)點(diǎn),,其他的都無(wú)法刪除,。 ①. 刪除單行嵌套的數(shù)據(jù)XML:language.xml(打開)
PHP:delete.php $XML=new DOMDocument("1.0","utf-8"); // 實(shí)例化一個(gè)對(duì)象,并設(shè)置 XML 版本和編碼 $XML->load("language.xml"); // 打開一個(gè) XML 文件 $root=$XML->documentElement; // 獲取根節(jié)點(diǎn) $parent=$XML->getElementsByTagName("Languages")->item(0); // 獲取指定的節(jié)點(diǎn)集合的父元素 $langs=$XML->getElementsByTagName("Lang"); // 獲取指定的節(jié)點(diǎn)集合 $lang=$langs->item(1); // 通過(guò) item() 獲取指定節(jié)點(diǎn) // 下面的三行代碼用于測(cè)試,,測(cè)試三次,,每次只使用其中一行,,通過(guò)對(duì)比來(lái)驗(yàn)證結(jié)論,! $XML->removeChild($lang); // 錯(cuò)誤,$XML 不是父節(jié)點(diǎn)(刪除此行程序會(huì)正常) $root->removeChild($lang); // 正確,,$root 恰巧是父節(jié)點(diǎn),,因?yàn)榍短字挥幸粚? $parent->removeChild($lang); // 正確,$parent 是真正的父節(jié)點(diǎn) $XML->save("language.xml"); // 親,,記得保存 ②. 刪除多行嵌套的數(shù)據(jù)XML:media.xml(打開)
PHP:delete.php $XML=new DOMDocument("1.0","utf-8"); // 實(shí)例化一個(gè)對(duì)象,,并設(shè)置 XML 版本和編碼 $XML->load("media.xml"); // 打開一個(gè) XML 文件 $root=$XML->documentElement; // 獲取根節(jié)點(diǎn) $parent=$XML->getElementsByTagName("music")->item(0); // 獲取指定的節(jié)點(diǎn)集合的父元素 $songs=$XML->getElementsByTagName("song"); // 獲取指定的節(jié)點(diǎn)集合 foreach($songs as $song) // 遍歷要操作的整個(gè)節(jié)點(diǎn)集合 { if($song->getAttribute("id")=="102") // 刪除 id 為102的節(jié)點(diǎn) { // 調(diào)試四次,每次只使用其中一行,! $XML->removeChild($song); // 錯(cuò)誤,,$XML 不是父節(jié)點(diǎn) $root->removeChild($song); // 錯(cuò)誤,$root 不是父節(jié)點(diǎn) $songs->removeChild($song); // 錯(cuò)誤,,$songs 不是父節(jié)點(diǎn) $parent->removeChild($song); // 正確,,$parent 是真正的父節(jié)點(diǎn) } } $XML->save("media.xml"); // 親,全部講完了,,記得好評(píng)呢~ |
|
來(lái)自: 月影曉風(fēng) > 《php》