详解PHP原生DOM对象操作XML的方法

发布于 2017-08-08 20:15:29 | 80 次阅读 | 评论: 0 | 来源: 网友投递

PHP开源脚本语言PHP(外文名: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,入门门槛较低,易于学习,使用广泛,主要适用于Web开发领域。PHP的文件后缀名为php。

大家都知道对于操作XML类型文件,PHP内置有一套DOM对象可以进行处理。对XML的操作,从创建、添加到修改、删除都可以使用DOM对象中的函数来进行。下面这篇文章通过示例代码给大家介绍如何进行操作,有需要的朋友们可以参考借鉴,下面来一起看看吧。

一、创建

创建一个新的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,可以看一下它的内容。

PHP0

PHP1

PHP2

PHP3

二、读取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 "

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

";

$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属性已经添加上。

PHP0

PHP1

PHP2

PHP3

三、修改节点属性&节点值

以上一节中的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属性已经改变,值也修改成功。

PHP0

PHP1

Hello,Kitty

PHP3

四、删除节点

要添加就会有删除。以上节的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的节点已被成功删除。

PHP0

PHP1

Hello,Kitty

向根节点中添加新的子节点

以上一节的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文件内容,新的子节点已经被插入到根节点中。

PHP0

PHP1

Hello,Kitty

lenovo

五、关于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;$ilength;$i++){

// echo $e->item($i)->nodeValue;

// }

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者使用PHP能有所帮助,如果有疑问大家可以留言交流。

相关阅读:

详解PHP原生DOM对象操作XML的方法

详解PHP序列化反序列化的方法

实例详解PHP中html word 互转的方法

详解PHP+AJAX无刷新分页实现方法

详解php中空字符串和0之间的关系

PHP基于XMLWriter操作xml的方法分析

详解PHP使用Redis存储session时的一个Warning定位

php以post形式发送xml的方法

PHP判断JSON对象是否存在的方法(推荐)

详解PHP对象的串行化与反串行化

PHP使用xpath解析XML的方法详解

详解PHP中的序列化、反序列化操作

php 赋值给 dom对象,详解PHP原生DOM对象操作XML的方法相关推荐

  1. ADO.NET常用对象详解之:Command对象

    1.Command对象概述   Command对象可以使用数据库命令直接与数据源进行通信.它的属性如下:   Name:Command对象的程序化名称.在代码中使用此名称来引用Command对象.   ...

  2. ADO.NET常用对象详解之:DataAdapter对象

    1.DataAdapter概述    DataAdapter类表示的是一组数据库命令和一个数据库连接,它们用来填充DataSet对象和更新数据源. 2.DataAdapter属性    SelectC ...

  3. 【ES6】Promise对象详解

    [ES6]Promise对象详解 一.Promise对象的含义 二.Promise对象的用法 三.Promise对象的几个应用[重点] 1.时间延迟函数 2.图片异步加载 查看更多ES6教学文章: 参 ...

  4. JS中的event 对象详解

    JS中的event 对象详解 JS的event对象 Event属性和方法: 1. type:事件的类型,如onlick中的click: 2. srcElement/target:事件源,就是发生事件的 ...

  5. Javascript中的Document对象详解

    Document对象详解 document 文挡对象 - JavaScript脚本语言描述           -------------------------------------------- ...

  6. 【JavaScript 教程】ES6 中的 Promise对象 详解

    [JavaScript 教程]ES6 中的 Promise对象 详解 1.Promise对象含义 promise是异步编程的一种解决方法. 所谓promise,简单说是一个容器,里面保存着某个未来才会 ...

  7. html内置时间对象,JavaScript中的常用事件,以及内置对象详解

    原标题:JavaScript中的常用事件,以及内置对象详解 今天是刘小爱自学Java的第81天. 感谢你的观看,谢谢你. 话不多说,开始今天的学习: 学前端有一个非常权威的组织,也就是w3c,其有个专 ...

  8. JS----window对象详解

    一.说明 他是JS中最大的对象,它描述的是一个浏览器窗口,一般要引用他的属性和方法时,不需要用"Window.XXX"这种形式,而是直接使用"XXX".一个框架 ...

  9. JavaScript高级编程--对象详解

    对象详解 Object.prototype.hasOwnProperty() 返回布尔 (原型对象的方法) 表示是否是对象自身的属性.所有实例对象都可以访问 这个方法会查找一个对象是否有某个属性,但是 ...

最新文章

  1. html点击散点图的点显示一个文本,javascript – D3.js中的简单散点图示例?
  2. 计量经济学建模_不了解计量经济学的前世今生,怎么能学会他
  3. vue如何使浏览器url固定_怎么给 vue的 vue-router url地址最后加上 / 斜杠
  4. java把map值放入vector_Thinking in java基础之集合框架
  5. python redis list_Python redis list列表操作
  6. 炒股十余年,亏了很多钱,现在很迷茫是退出股市还是继续坚持?
  7. 【Python】Python中文编码
  8. linux怎样修改目录字体颜色
  9. 2019118_四个化学数据分析(3)
  10. 14.TCP/IP 详解卷1 --- DNS:域名系统
  11. sas编程技术教程 人大经济论坛sas培训
  12. RubyOnRails终极部署
  13. 松下A6驱动面板操作参数设置与保存
  14. 【风马一族_php】
  15. 如何在虚拟机中运行知乎App
  16. Compensating-Transaction模式
  17. 黑马在线教育数仓实战5
  18. 为什么那么多的企业选择上云,上云有哪些优势?
  19. 说说Mac上的Shell指令
  20. Inno安装语言注意

热门文章

  1. SAP License:谈对财务人的解惑
  2. 系统性风险与个体性风险
  3. 数据粒度的上卷和下钻
  4. 软件工程学习进度第十周汇总
  5. 在vue项目中同时使用element-ui和mint-ui,的时候,.babelrc配置文件怎么写
  6. java 多线程的一种实现方式
  7. cookie 单值设置
  8. 文本框添加问内容下划线
  9. Android初级教程初谈自定义view自定义属性
  10. 沿环形路径创建渐变画笔