99热99这里只有精品6国产,亚洲中文字幕在线天天更新,在线观看亚洲精品国产福利片 ,久久久久综合网

歡迎加入QQ討論群258996829
麥子學(xué)院 頭像
蘋果6袋
6
麥子學(xué)院

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

發(fā)布時(shí)間:2016-10-20 14:12  回復(fù):0  查看:2336   最后回復(fù):2016-10-20 14:12  

對(duì)于操作XML類型文件,PHP語(yǔ)言內(nèi)置有一套DOM對(duì)象可以進(jìn)行處理。對(duì)XML的操作,從創(chuàng)建、添加到修改、刪除都可以使用DOM對(duì)象中的函數(shù)來(lái)進(jìn)行。

創(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)容。

<EventList>

<eventobj="power" info="power is shutdown">PHP0event>

<eventobj="memcache" info="memcache used than 90%">PHP1event>

<eventobj="cpu" info="cpu used than 95%">PHP2event>

<eventobj="disk" info="disk is removed">PHP3event>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($listas $item){

$attr_obj = $item->getAttribute('obj');//獲取屬性obj的值

$attr_info = $item->getAttribute('info');

echo "

Object:$attr_obj;Info:$attr_info;Value:{$item->nodeValue}

";

$item->setAttribute('count',1);//添加新的屬性count=1

}

$dom->save('./t.xml');//保存修改

  看一下提取到的值:

Object:power;Info:poweris shutdown;Value:PHP0

Object:memcache;Info:memcacheusedthan 90%;Value:PHP1

Object:cpu;Info:cpuusedthan 95%;Value:PHP2

Object:disk;Info:diskis removed;Value:PHP3

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

<EventList>

<eventobj="power" info="power is shutdown" count="1">PHP0event>

<eventobj="memcache" info="memcache used than 90%" count="1">PHP1event>

<eventobj="cpu" info="cpu used than 95%" count="1">PHP2event>

<eventobj="disk" info="disk is removed" count="1">PHP3event>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($listas $item){

$attr_obj = $item->getAttribute('obj');

if($attr_obj == 'cpu'){//修改cpucount屬性,使其值+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)改變,值也修改成功。

<EventList>

<eventobj="power" info="power is shutdown" count="1">PHP0event>

<eventobj="memcache" info="memcache used than 90%" count="1">PHP1event>

<eventobj="cpu" info="cpu used than 95%" count="2">Hello,Kittyevent>

<eventobj="disk" info="disk is removed" count="1">PHP3event>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($listas $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)已被成功刪除。

<EventList>

<eventobj="power" info="power is shutdown" count="1">PHP0event>

<eventobj="memcache" info="memcache used than 90%" count="1">PHP1event>

<eventobj="cpu" info="cpu used than 95%" count="2">Hello,Kittyevent>

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)中。

<EventList>

<eventobj="power" info="power is shutdown" count="1">PHP0event>

<eventobj="memcache" info="memcache used than 90%" count="1">PHP1event>

<eventobj="cpu" info="cpu used than 95%" count="2">Hello,Kittyevent>

<eventobj="lenovo" info="thinkpad t430">lenovoevent>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)?/span>EventList節(jié)點(diǎn)是根節(jié)點(diǎn),有且僅有一個(gè),所以它調(diào)用item(index)時(shí),索引只有index=0可用,因?yàn)樗挥?/span>1個(gè);而如果e=dom?>getElementsByTagName(‘event′)獲取event節(jié)點(diǎn)的信息,因?yàn)?/span>event4個(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;

// }

 

文章來(lái)源:伯樂(lè)在線

您還未登錄,請(qǐng)先登錄

熱門帖子

最新帖子

?