欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解PHP原生DOM對(duì)象操作XML的方法

 更新時(shí)間:2016年10月17日 10:31:49   投稿:daisy  
大家都知道對(duì)于操作XML類型文件,PHP內(nèi)置有一套DOM對(duì)象可以進(jìn)行處理。對(duì)XML的操作,從創(chuàng)建、添加到修改、刪除都可以使用DOM對(duì)象中的函數(shù)來(lái)進(jìn)行。下面這篇文章通過(guò)示例代碼給大家介紹如何進(jìn)行操作,有需要的朋友們可以參考借鑒,下面來(lái)一起看看吧。

一、創(chuàng)建

創(chuàng)建一個(gè)新的XML文件,并且寫入一些數(shù)據(jù)到這個(gè)XML文件中。

/*
 * 創(chuàng)建xml文件
 */
 
$info = array(
 array('obj' => 'power','info' => 'power is shutdown'),
 array('obj' => 'memcache','info' => 'memcache used than 90%'),
 array('obj' => 'cpu','info' => 'cpu used than 95%'),
 array('obj' => 'disk','info' => 'disk is removed')
);//用來(lái)寫入的數(shù)據(jù)
 
$dom = new DOMDocument('1.0');
$dom->formatOutput = true;//格式化
 
$eventList = $dom->createElement('EventList');//創(chuàng)建根節(jié)點(diǎn)EventList
$dom->appendChild($eventList);//添加根節(jié)點(diǎn)
 
for($i = 0; $i < count($info); $i++){
 $event = $dom->createElement('event');//創(chuàng)建節(jié)點(diǎn)event
 $text = $dom->createTextNode('PHP'.$i);//創(chuàng)建文本節(jié)點(diǎn),值為PHP0,PHP1...
 $event->appendChild($text);//將文本節(jié)點(diǎn)添加到節(jié)點(diǎn)event,做為節(jié)點(diǎn)event的值
 
 $attr_obj = $dom->createAttribute('obj');//創(chuàng)建屬性obj
 $attr_obj->value = $info[$i]['obj'];//為obj屬性賦值
 $event->appendChild($attr_obj);//將obj屬性添加到event節(jié)點(diǎn)中,做為event節(jié)點(diǎn)的屬性
 
 $attr_info = $dom->createAttribute('info');
 $attr_info->value = $info[$i]['info'];
 $event->appendChild($attr_info);
 
 $eventList->appendChild($event);//將event節(jié)點(diǎn)添加到根節(jié)點(diǎn)EventList中
}
 
//echo $dom->saveXML();
$dom->save('./t.xml');//保存信息到當(dāng)前目錄下的t.xml文件中

上面的代碼段可以創(chuàng)建一個(gè)XML文件,并添加一些信息到這個(gè)文件中,包括值和屬性,最終形成的文件為當(dāng)前目錄下的t.xml,可以看一下它的內(nèi)容。

<?xml version="1.0"?>
<EventList>
 <event obj="power" info="power is shutdown">PHP0</event>
 <event obj="memcache" info="memcache used than 90%">PHP1</event>
 <event obj="cpu" info="cpu used than 95%">PHP2</event>
 <event obj="disk" info="disk is removed">PHP3</event>
</EventList>

二、讀取XML信息&添加新的屬性

以上一節(jié)創(chuàng)建的t.xml文件為操作對(duì)象,讀取出t.xml文件中的信息,并給節(jié)點(diǎn)添加一個(gè)新的屬性count,其值為1。

/*
 * 讀取xml文件信息,并添加新的屬性
 */
 
$dom = new DOMDocument('1.0');
$dom->load('./t.xml');//加載要操作的文件
$list = $dom->getElementsByTagName('event');//獲取event節(jié)點(diǎn)列表
foreach($list as $item){
 $attr_obj = $item->getAttribute('obj');//獲取屬性obj的值
 $attr_info = $item->getAttribute('info');
 echo "<pre>Object:$attr_obj;Info:$attr_info;Value:{$item->nodeValue}</pre>";
 $item->setAttribute('count',1);//添加新的屬性count=1
}
$dom->save('./t.xml');//保存修改

看一下提取到的值:

Object:power;Info:power is shutdown;Value:PHP0
 
Object:memcache;Info:memcache used than 90%;Value:PHP1
 
Object:cpu;Info:cpu used than 95%;Value:PHP2
 
Object:disk;Info:disk is removed;Value:PHP3

再看一下現(xiàn)在的t.xml文件的內(nèi)容,count屬性已經(jīng)添加上。

<?xml version="1.0"?>
<EventList>
 <event obj="power" info="power is shutdown" count="1">PHP0</event>
 <event obj="memcache" info="memcache used than 90%" count="1">PHP1</event>
 <event obj="cpu" info="cpu used than 95%" count="1">PHP2</event>
 <event obj="disk" info="disk is removed" count="1">PHP3</event>
</EventList>

三、修改節(jié)點(diǎn)屬性&節(jié)點(diǎn)值

以上一節(jié)中的t.xml文件為操作對(duì)象,修改一下obj屬性是cpu的節(jié)點(diǎn)的count值,新的值為count+1

/*
 * 修改某一個(gè)節(jié)點(diǎn)的屬性和值
 */
 
$dom = new DOMDocument('1.0');
$dom->load('./t.xml');
$list = $dom->getElementsByTagName('event');
foreach($list as $item){
 $attr_obj = $item->getAttribute('obj');
 if($attr_obj == 'cpu'){//修改cpu的count屬性,使其值+1
  $attr_count = $item->getAttribute('count');//獲取count屬性的值
  $item->setAttribute('count',$attr_count+1);//重置count屬性的值
  $item->nodeValue = 'Hello,Kitty';//重置節(jié)點(diǎn)的值
 }
}
$dom->save('./t.xml');

操作后的t.xml文件如下,要以看到obj=cpu的節(jié)點(diǎn)的count屬性已經(jīng)改變,值也修改成功。

<?xml version="1.0"?>
<EventList>
 <event obj="power" info="power is shutdown" count="1">PHP0</event>
 <event obj="memcache" info="memcache used than 90%" count="1">PHP1</event>
 <event obj="cpu" info="cpu used than 95%" count="2">Hello,Kitty</event>
 <event obj="disk" info="disk is removed" count="1">PHP3</event>
</EventList>

四、刪除節(jié)點(diǎn)

要添加就會(huì)有刪除。以上節(jié)的t.xml文件為操作對(duì)象,刪除obj=disk的節(jié)點(diǎn)。

/*
 * 刪除節(jié)點(diǎn)
 */
 
$dom = new DOMDocument('1.0');
$dom->load('./t.xml');
$list = $dom->getElementsByTagName('event');
foreach($list as $item){
 if($item->getAttribute('obj') == 'disk'){//以obj=disk的節(jié)點(diǎn)為操作對(duì)象
  $item->parentNode->removeChild($item);//刪除節(jié)點(diǎn)
 }
}
$dom->save('./t.xml');

看一下操作后的t.xml文件內(nèi)容,obj=disk的節(jié)點(diǎn)已被成功刪除。

<?xml version="1.0"?>
<EventList>
 <event obj="power" info="power is shutdown" count="1">PHP0</event>
 <event obj="memcache" info="memcache used than 90%" count="1">PHP1</event>
 <event obj="cpu" info="cpu used than 95%" count="2">Hello,Kitty</event>
 
</EventList>

向根節(jié)點(diǎn)中添加新的子節(jié)點(diǎn)

以上一節(jié)的t.xml為操作對(duì)象,向根節(jié)點(diǎn)EventList中添加一個(gè)新的子節(jié)點(diǎn)。

/*
 * 向EventList中添加一個(gè)子節(jié)點(diǎn)
 */
 
$dom = new DOMDocument('1.0');
$dom->load('./t.xml');
$event_list = $dom->getElementsByTagName('EventList');//獲取根節(jié)點(diǎn)
$event = $dom->createElement('event','lenovo');//新建節(jié)點(diǎn)
$event_list->item(0)->appendChild($event);//將新建節(jié)點(diǎn)添加到根節(jié)點(diǎn)中
 
$event_attr_obj = $dom->createAttribute('obj');
$event_attr_obj->value = 'lenovo';
$event->appendChild($event_attr_obj);
 
$event_attr_info = $dom->createAttribute('info');
$event_attr_info->value = 'thinkpad t430';
$event->appendChild($event_attr_info);
 
$dom->save('./t.xml');

看一下操作后的t.xml文件內(nèi)容,新的子節(jié)點(diǎn)已經(jīng)被插入到根節(jié)點(diǎn)中。

<?xml version="1.0"?>
<EventList>
 <event obj="power" info="power is shutdown" count="1">PHP0</event>
 <event obj="memcache" info="memcache used than 90%" count="1">PHP1</event>
 <event obj="cpu" info="cpu used than 95%" count="2">Hello,Kitty</event>
 
<event obj="lenovo" info="thinkpad t430">lenovo</event></EventList>

五、關(guān)于item($index)

item(index)是DOMNodeList類中的一個(gè)方法,它的做用是返回一個(gè)由索引指明的節(jié)點(diǎn)。而DOMDocument類中的getElementsByTagName(name)方法返回的正是一個(gè)DOMNodeList對(duì)象的實(shí)例,所以可以直接調(diào)用item(index)方法。以上節(jié)的t.xml為示例,如果e=dom−>getElementsByTagName(‘EventList′)獲取EventList節(jié)點(diǎn)的信息,因?yàn)镋ventList節(jié)點(diǎn)是根節(jié)點(diǎn),有且僅有一個(gè),所以它調(diào)用item(index)時(shí),索引只有index=0可用,因?yàn)樗挥?個(gè);而如果e=dom−>getElementsByTagName(‘event′)獲取event節(jié)點(diǎn)的信息,因?yàn)閑vent有4個(gè),所以它調(diào)用item(index)時(shí),索引$index={0,1,2,3} ,有4個(gè)值可以選。每個(gè)節(jié)點(diǎn)都包含多個(gè)屬性,它可以以一種鍵值對(duì)數(shù)組的形式表現(xiàn)出來(lái),如下所示:

object(DOMElement)#3 (18) {
 ["tagName"]=>
 string(5) "event"
 ["schemaTypeInfo"]=>
 NULL
 ["nodeName"]=>
 string(5) "event"
 ["nodeValue"]=>
 string(11) "Hello,Kitty"
 ["nodeType"]=>
 int(1)
 ["parentNode"]=>
 string(22) "(object value omitted)"
 ["childNodes"]=>
 string(22) "(object value omitted)"
 ["firstChild"]=>
 string(22) "(object value omitted)"
 ["lastChild"]=>
 string(22) "(object value omitted)"
 ["previousSibling"]=>
 string(22) "(object value omitted)"
 ["nextSibling"]=>
 string(22) "(object value omitted)"
 ["attributes"]=>
 string(22) "(object value omitted)"
 ["ownerDocument"]=>
 string(22) "(object value omitted)"
 ["namespaceURI"]=>
 NULL
 ["prefix"]=>
 string(0) ""
 ["localName"]=>
 string(5) "event"
 ["baseURI"]=>
 string(36) "file:/H:/xampp/htdocs/demo/xml/t.xml"
 ["textContent"]=>
 string(11) "Hello,Kitty"
}

也可以當(dāng)做對(duì)象的屬性來(lái)用,例如獲取這個(gè)節(jié)點(diǎn)的值:

/*
 * 關(guān)于item()
 */
$dom = new DOMDocument('1.0');
$dom->load('./t.xml');
$e = $dom->getElementsByTagName('event');
echo $e->item(2)->nodeValue;
//var_dump($e->item(2));
// $e = $dom->getElementsByTagName('EventList');
// var_dump($e->item(0));
//var_dump($e->item(0)->baseURI);
// for($i=0;$i<$e->length;$i++){
//  echo $e->item($i)->nodeValue;
// }

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家學(xué)習(xí)或者使用PHP能有所幫助,如果有疑問(wèn)大家可以留言交流。

相關(guān)文章

  • 有關(guān)JSON以及JSON在PHP中的應(yīng)用

    有關(guān)JSON以及JSON在PHP中的應(yīng)用

    簡(jiǎn) 單地說(shuō),JSON 可以將 JavaScript 對(duì)象中表示的一組數(shù)據(jù)轉(zhuǎn)換為字符串,然后就可以在函數(shù)之間輕松地傳遞這個(gè)字符串,或者在異步應(yīng)用程序中將字符串從 Web 客戶機(jī)傳遞給服務(wù)器端程序。
    2010-04-04
  • php+ajax無(wú)刷新分頁(yè)實(shí)例詳解

    php+ajax無(wú)刷新分頁(yè)實(shí)例詳解

    這篇文章主要介紹了php+ajax無(wú)刷新分頁(yè)的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了php數(shù)據(jù)查詢結(jié)合ajax數(shù)據(jù)交互實(shí)現(xiàn)無(wú)刷新分頁(yè)效果的相關(guān)技巧,需要的朋友可以參考下
    2015-12-12
  • php文件上傳原理與實(shí)現(xiàn)方法詳解

    php文件上傳原理與實(shí)現(xiàn)方法詳解

    這篇文章主要介紹了php文件上傳原理與實(shí)現(xiàn)方法,結(jié)合實(shí)例形式詳細(xì)分析了PHP文件上傳的配置、前后臺(tái)處理、錯(cuò)誤處理等相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2019-12-12
  • LINUX下PHP程序?qū)崿F(xiàn)WORD文件轉(zhuǎn)化為PDF文件的方法

    LINUX下PHP程序?qū)崿F(xiàn)WORD文件轉(zhuǎn)化為PDF文件的方法

    這篇文章主要介紹了LINUX下PHP程序?qū)崿F(xiàn)WORD文件轉(zhuǎn)化為PDF文件的方法,涉及php針對(duì)Word文檔與pdf格式文件的相關(guān)操作技巧,需要的朋友可以參考下
    2016-05-05
  • 深入解析PHP的Yii框架中的event事件機(jī)制

    深入解析PHP的Yii框架中的event事件機(jī)制

    這篇文章主要介紹了PHP的Yii框架中的event事件機(jī)制,文中講解了Yii的事件處理器以及給組件對(duì)象綁定事件處理函數(shù)等重要知識(shí),需要的朋友可以參考下
    2016-03-03
  • PHP 刪除文件與文件夾操作 unlink()與rmdir()這兩個(gè)函數(shù)的使用

    PHP 刪除文件與文件夾操作 unlink()與rmdir()這兩個(gè)函數(shù)的使用

    有時(shí)候我們需要用PHP來(lái)刪除文件和文件夾,PHP本來(lái)也都有函數(shù)可以實(shí)現(xiàn),下面簡(jiǎn)單記錄一下代碼,方便以后信守拈來(lái)。
    2011-07-07
  • 解決安裝WampServer時(shí)提示缺少msvcr110.dll文件的問(wèn)題

    解決安裝WampServer時(shí)提示缺少msvcr110.dll文件的問(wèn)題

    下面小編就為大家?guī)?lái)一篇解決安裝WampServer時(shí)提示缺少msvcr110.dll文件的問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-07-07
  • PHP實(shí)現(xiàn)的折半查找算法示例

    PHP實(shí)現(xiàn)的折半查找算法示例

    這篇文章主要介紹了PHP實(shí)現(xiàn)的折半查找算法,簡(jiǎn)單描述了折半查找的原理,并結(jié)合實(shí)例形式分析了php采用遞歸與非遞歸方式實(shí)現(xiàn)折半查找算法的相關(guān)操作技巧,需要的朋友可以參考下
    2017-12-12
  • PHP mongodb操作類定義與用法示例【適合mongodb2.x和mongodb3.x】

    PHP mongodb操作類定義與用法示例【適合mongodb2.x和mongodb3.x】

    這篇文章主要介紹了PHP mongodb操作類定義與用法,結(jié)合實(shí)例形式分析了php封裝的適合mongodb2.x和mongodb3.x版本MongoDB數(shù)據(jù)庫(kù)連接、增刪改查、錯(cuò)誤處理等操作定義與使用方法,需要的朋友可以參考下
    2018-06-06
  • 設(shè)定php簡(jiǎn)寫功能的方法

    設(shè)定php簡(jiǎn)寫功能的方法

    在本篇文章里小編給大家整理的是關(guān)于如何設(shè)定php簡(jiǎn)寫功能的相關(guān)文章以及知識(shí)點(diǎn),有需要的朋友們可以學(xué)習(xí)下。
    2019-11-11

最新評(píng)論