国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

詳解PHP原生DOM對象操作XML的方法

2024-05-04 23:51:10
字體:
來源:轉載
供稿:網友

一、創建

創建一個新的XML文件,并且寫入一些數據到這個XML文件中。

/* * 創建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'));//用來寫入的數據 $dom = new DOMDocument('1.0');$dom->formatOutput = true;//格式化 $eventList = $dom->createElement('EventList');//創建根節點EventList$dom->appendChild($eventList);//添加根節點 for($i = 0; $i < count($info); $i++){ $event = $dom->createElement('event');//創建節點event $text = $dom->createTextNode('PHP'.$i);//創建文本節點,值為PHP0,PHP1... $event->appendChild($text);//將文本節點添加到節點event,做為節點event的值  $attr_obj = $dom->createAttribute('obj');//創建屬性obj $attr_obj->value = $info[$i]['obj'];//為obj屬性賦值 $event->appendChild($attr_obj);//將obj屬性添加到event節點中,做為event節點的屬性  $attr_info = $dom->createAttribute('info'); $attr_info->value = $info[$i]['info']; $event->appendChild($attr_info);  $eventList->appendChild($event);//將event節點添加到根節點EventList中} //echo $dom->saveXML();$dom->save('./t.xml');//保存信息到當前目錄下的t.xml文件中

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

<?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信息&添加新的屬性

以上一節創建的t.xml文件為操作對象,讀取出t.xml文件中的信息,并給節點添加一個新的屬性count,其值為1。

/* * 讀取xml文件信息,并添加新的屬性 */ $dom = new DOMDocument('1.0');$dom->load('./t.xml');//加載要操作的文件$list = $dom->getElementsByTagName('event');//獲取event節點列表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

再看一下現在的t.xml文件的內容,count屬性已經添加上。

<?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>

三、修改節點屬性&節點值

以上一節中的t.xml文件為操作對象,修改一下obj屬性是cpu的節點的count值,新的值為count+1

/* * 修改某一個節點的屬性和值 */ $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';//重置節點的值 }}$dom->save('./t.xml');

操作后的t.xml文件如下,要以看到obj=cpu的節點的count屬性已經改變,值也修改成功。

<?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>

四、刪除節點

要添加就會有刪除。以上節的t.xml文件為操作對象,刪除obj=disk的節點。

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

看一下操作后的t.xml文件內容,obj=disk的節點已被成功刪除。

<?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>

向根節點中添加新的子節點

以上一節的t.xml為操作對象,向根節點EventList中添加一個新的子節點。

/* * 向EventList中添加一個子節點 */ $dom = new DOMDocument('1.0');$dom->load('./t.xml');$event_list = $dom->getElementsByTagName('EventList');//獲取根節點$event = $dom->createElement('event','lenovo');//新建節點$event_list->item(0)->appendChild($event);//將新建節點添加到根節點中 $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文件內容,新的子節點已經被插入到根節點中。

<?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>

五、關于item($index)

item(index)是DOMNodeList類中的一個方法,它的做用是返回一個由索引指明的節點。而DOMDocument類中的getElementsByTagName(name)方法返回的正是一個DOMNodeList對象的實例,所以可以直接調用item(index)方法。以上節的t.xml為示例,如果e=dom−>getElementsByTagName(‘EventList′)獲取EventList節點的信息,因為EventList節點是根節點,有且僅有一個,所以它調用item(index)時,索引只有index=0可用,因為它只有1個;而如果e=dom−>getElementsByTagName(‘event′)獲取event節點的信息,因為event有4個,所以它調用item(index)時,索引$index={0,1,2,3} ,有4個值可以選。每個節點都包含多個屬性,它可以以一種鍵值對數組的形式表現出來,如下所示:

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"}

也可以當做對象的屬性來用,例如獲取這個節點的值:

/* * 關于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;// }

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家學習或者使用PHP能有所幫助,如果有疑問大家可以留言交流。


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 新兴县| 武冈市| 田阳县| 洛川县| 延川县| 宜兰县| 沭阳县| 常熟市| 霞浦县| 保靖县| 永春县| 讷河市| 五家渠市| 阜新市| 喜德县| 西乌珠穆沁旗| 浦北县| 中西区| 台安县| 扎兰屯市| 开阳县| 惠安县| 梅河口市| 蒙阴县| 丰顺县| 白河县| 简阳市| 柳州市| 梨树县| 平安县| 洱源县| 清新县| 鹿泉市| 梧州市| 牙克石市| 云和县| 韶山市| 澄江县| 穆棱市| 洪洞县| 天台县|