php操作xml


Posted in PHP onOctober 27, 2013

要操作的数据

<?xml version="1.0"?>
<books>
    <book name="JavaScript: The Defiitive Guide" publisher="O'Reilly Media, Inc.">
        <author>David Flanagan</author>
    </book>
    <book name="PHP anf MySQL Web Development" publisher="Perason Education">
        <author>Luke Welling</author>
        <author>Laura Thomson</author>
    </book>
    <book name="HTTP: The Defiitive Guide" publisher="O'Reilly Media, Inc.">
        <author>David Courley</author>
        <author>Brian Totty</author>
    </book>
</books>

XML几个基本概念
1、 节点:节点也就是很多程序语言中处理XML时的Node,节点是一个比较宽泛的概念,在XML中元素,属性,名字空间,注释,文本内容,处理指令,还有整个文档都属于节点,也就是说XML文档中每个独立的一小部分都是节点,<books></books>是,<?xml version=”1.0”?>也是,name=”XXXX”也是,<author></author>标签是,甚至作者的名字David Flanagan都是一个文本节点。
2、元素:很多程序语言都有对XML处理,节点是一个很宽泛的概念,因为要统一API,对节点不会有过多方法,而元素也就是Element是节点的一个子集,简单讲就是<xxx></xxx>这样的标签才算,一般会有很多针对元素的操作方法。
3、属性:这个比较好理解,在<>里面的类似XX=”OO”等东西都是属性节点
4、转义字符:和HTML等类似,xml也有语言占用的符号,想使用的这些特殊字符的时候需要转义
php操作xml
DOMDocument对象
我使用的是DOMDocument对象来操作xml,感觉用起来比simpleXml科学一些,当然第一天使用php,纯属个人感觉。DOMDocument有几个常用的属性和方法。
php操作xml

加载xml

$path=$_SERVER["DOCUMENT_ROOT"].'/books.xml';
    $books=new DOMDocument();
    $books->load($path);

读取/遍历节点与属性

$bookElements=$books->getElementsByTagName('book');
    foreach($bookElements as $book){
        foreach ($book->attributes as $attr) {
            echo strtoupper($attr->nodeName).' —— '.$attr->nodeValue.'<br/>';
        }
        echo "AUTHOR: ";
        foreach ($book->getElementsByTagName('author') as $author) {
            echo $author->nodeValue.' ';
        }
        echo '<br/><br/>';
    }

php操作xml

当然对于很多属性,只想读一个,可以通过item(index)方法按索引读取

echo $book->attributes->item(1)->nodeValue;

还可以通过强大的xpath查询
还可以通过强大的xpath查询

修改属性/节点

foreach($bookElements as $book){
        foreach ($book->attributes as $attr) {
            #$book->setAttribute($attr->nodeName,strtoupper($attr->nodeValue));
            $attr->nodeValue=strtoupper($attr->nodeValue);
        }
        echo "AUTHOR: ";
        foreach ($book->getElementsByTagName('author') as $author) {
            $author->nodeValue=strtoupper($author->nodeValue);
        }
    }
    $books->save($path);

php操作xml

对属性修改可以直接访问其nodeValue改动,也可以使用setAttribute方法,改动完了别忘了使用save保存。

$book->setAttribute($attr->nodeName,strtoupper($attr->nodeValue));
$attr->nodeValue=strtoupper($attr->nodeValue);

添加元素/属性

$newBook=$books->createElement('book'); #创建新元素
    $newBook->setAttribute('name','PHP Objects, Patterns, and Practice');#创建新属性,方法一
    $publisher=$books->createAttribute('publisher');#创建新属性,方法二
    $publisher->nodeValue='Apress L.P';
    $newBook->appendChild($publisher); #把属性添加到元素上
    $author=$books->createElement('author');#创建子元素
    $author->nodeValue='Matt Zandstra';
    $newBook->appendChild($author);#把子元素添加到父元素上
    $books->documentElement->appendChild($newBook);#添加整个节点
    $books->save($path);

删除属性/节点

$first=$bookElements->item(0);
    $first->removeAttribute('publisher');
    $second=$bookElements->item(1);
    $second->parentNode->removeChild($second);
    $books->save($path);

php操作xml

初学php文章肯定有很多谬误,希望大家批评指正,共同进步。

PHP 相关文章推荐
PHP无限分类的类
Jan 02 PHP
php桌面中心(四) 数据显示
Mar 11 PHP
Joomla下利用configuration.php存储简单数据
May 19 PHP
PHP定时自动生成静态HTML的实现代码
Jun 20 PHP
PHP计数器的实现代码
Jun 08 PHP
使用PHP遍历文件目录与清除目录中文件的实现详解
Jun 24 PHP
php 使用curl模拟ip和来源进行访问的实现方法
May 02 PHP
浅谈PHP中pack、unpack的详细用法
Mar 12 PHP
PHP手机短信验证码实现流程详解
May 17 PHP
php使用redis的有序集合zset实现延迟队列应用示例
Feb 20 PHP
PHP dirname简单使用代码实例
Nov 13 PHP
PHP安装扩展mcrypt以及相关依赖项深入讲解
Mar 04 PHP
关于php内存不够用的快速解决方法
Oct 26 #PHP
PHP中$_SERVER的详细参数与说明介绍
Oct 26 #PHP
php数组转换js数组操作及json_encode的用法详解
Oct 26 #PHP
php while循环得到循环次数
Oct 26 #PHP
php中OR与|| AND与&amp;&amp;的区别总结
Oct 26 #PHP
php中的PHP_EOL换行符详细解析
Oct 26 #PHP
一个简单且很好用的php分页类
Oct 26 #PHP
You might like
php基础知识:类与对象(1)
2006/12/13 PHP
php存储过程调用实例代码
2013/02/03 PHP
php Session存储到Redis的方法
2013/11/04 PHP
php版小黄鸡simsimi聊天机器人接口分享
2014/01/26 PHP
解决laravel(5.5)访问public报错的问题
2019/10/12 PHP
javascript cookie解码函数(兼容ff)
2008/03/17 Javascript
JavaScript在多浏览器下for循环的使用方法
2012/11/07 Javascript
原生js实现移动开发轮播图、相册滑动特效
2015/04/17 Javascript
你所不了解的javascript操作DOM的细节知识点(一)
2015/06/17 Javascript
Javascript实现网络监测的方法
2015/07/31 Javascript
javascript设置文本框光标的方法实例小结
2016/11/04 Javascript
Nodejs实现短信验证码功能
2017/02/09 NodeJs
vue2.0在table中实现全选和反选的示例代码
2017/11/04 Javascript
nodejs基于express实现文件上传的方法
2018/03/19 NodeJs
[53:43]VP vs NewBee Supermajor 胜者组 BO3 第三场 6.5
2018/06/06 DOTA
Python HTMLParser模块解析html获取url实例
2015/04/08 Python
Python2实现的LED大数字显示效果示例
2017/09/04 Python
python实现将文件夹下面的不是以py文件结尾的文件都过滤掉的方法
2018/10/21 Python
python读出当前时间精度到秒的代码
2019/07/05 Python
Django 源码WSGI剖析过程详解
2019/08/05 Python
Python中的self用法详解
2019/08/06 Python
python并发编程 Process对象的其他属性方法join方法详解
2019/08/20 Python
python3 实现函数写文件路径的正确方法
2019/11/27 Python
Keras: model实现固定部分layer,训练部分layer操作
2020/06/28 Python
Python基于traceback模块获取异常信息
2020/07/23 Python
python 爬取腾讯视频评论的实现步骤
2021/02/18 Python
英国最大最好的无人机商店:Drones Direct
2019/07/12 全球购物
求两个数的乘积和商数,该作用由宏定义来实现
2013/03/13 面试题
行政经理岗位职责
2013/11/09 职场文书
机关财务管理制度
2014/01/17 职场文书
关爱留守儿童倡议书
2014/04/15 职场文书
领导走群众路线整改措施思想汇报
2014/10/12 职场文书
单位租房协议范本
2014/12/03 职场文书
《草船借箭》教学反思
2016/02/23 职场文书
Python中threading库实现线程锁与释放锁
2021/05/17 Python
Flink 侧流输出源码示例解析
2022/09/23 Servers