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 相关文章推荐
MySQL连接数超过限制的解决方法
Jul 17 PHP
PHP的博客ping服务代码
Feb 04 PHP
PHP实用函数分享之去除多余的0
Feb 06 PHP
Smarty最简单实现列表奇偶变色的方法
Jul 01 PHP
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
Dec 14 PHP
PHP编程实现微信企业向用户付款的方法示例
Jul 26 PHP
php实现微信支付之企业付款
May 30 PHP
在Laravel5.6中使用Swoole的协程数据库查询
Jun 15 PHP
php+croppic.js实现剪切上传图片功能
Aug 14 PHP
PHP PDOStatement::nextRowset讲解
Feb 01 PHP
PHP中单例模式的使用场景与使用方法讲解
Mar 18 PHP
Laravel 登录后清空COOKIE的操作方法
Oct 14 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 自定义错误处理函数trigger_error()
2013/03/26 PHP
浅析PHP绘图技术
2013/07/03 PHP
PHP中读取文件的8种方法和代码实例
2014/08/05 PHP
PHP中header函数的用法及其注意事项详解
2016/06/13 PHP
PHP简单判断手机设备的方法
2016/08/23 PHP
JavaScript性能优化 创建文档碎片(document.createDocumentFragment)
2010/07/13 Javascript
jquery lazyload延迟加载技术的实现原理分析
2011/01/24 Javascript
js去字符串前后空格5种实现方法及比较
2013/04/03 Javascript
javascript setTimeout和setInterval计时的区别详解
2013/06/21 Javascript
jquery获取iframe中的dom对象(两种方法)
2013/07/02 Javascript
JavaScript打印iframe内容示例代码
2013/08/20 Javascript
不同Jquery版本引发的问题解决
2013/10/14 Javascript
批量修改标签css样式以input标签为例
2014/07/31 Javascript
jQuery中clone()方法用法实例
2015/01/16 Javascript
jQuery实现的导航动画效果(附demo源码)
2016/04/01 Javascript
微信js-sdk预览图片接口及从拍照或手机相册中选图接口用法示例
2016/10/13 Javascript
Vue非父子组件通信详解
2017/06/12 Javascript
深入webpack打包原理及loader和plugin的实现
2020/05/06 Javascript
Vue中component标签解决项目组件化操作
2020/09/04 Javascript
[02:07]DOTA2超级联赛专访BBC:难忘网吧超神经历
2013/06/09 DOTA
[01:14:55]EG vs Spirit Supermajor 败者组 BO3 第三场 6.4
2018/06/05 DOTA
Python中字符串的处理技巧分享
2016/09/17 Python
Python数据结构与算法之图的基本实现及迭代器实例详解
2017/12/12 Python
python http接口自动化脚本详解
2018/01/02 Python
python读写csv文件并增加行列的实例代码
2019/08/01 Python
Python3常用内置方法代码实例
2019/11/18 Python
Tensorflow矩阵运算实例(矩阵相乘,点乘,行/列累加)
2020/02/05 Python
Python3 filecmp模块测试比较文件原理解析
2020/03/23 Python
基于python模拟bfs和dfs代码实例
2020/11/19 Python
纯CSS实现右侧底部悬浮效果(悬浮QQ、微信、微博、邮箱等联系方式)
2015/04/24 HTML / CSS
政法大学毕业生自荐信范文
2014/01/01 职场文书
十佳大学生事迹材料
2014/01/29 职场文书
事业单位绩效考核实施方案
2014/03/27 职场文书
社区活动策划方案
2014/08/21 职场文书
优秀团员个人总结
2015/02/26 职场文书
党员“一帮一”活动总结
2015/05/07 职场文书