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 相关文章推荐
用DBSQL类加快开发MySQL数据库程序的速度
Oct 09 PHP
彻底杜绝PHP的session cookie错误
Aug 09 PHP
php 各种应用乱码问题的解决方法
May 09 PHP
PHP开发的一些注意点总结
Oct 12 PHP
献给php初学者(入门学习经验谈)
Oct 12 PHP
解析thinkphp中的导入文件标签
Jun 20 PHP
php获取从百度搜索进入网站的关键词的详细代码
Jan 08 PHP
PHP base64编码后解码乱码的解决办法
Jun 19 PHP
php实现json编码的方法
Jul 30 PHP
详解php魔术方法(Magic methods)的使用方法
Feb 14 PHP
php5.3后静态绑定用法详解
Nov 11 PHP
PHP pthreads v3在centos7平台下的安装与配置操作方法
Feb 21 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教程 变量定义
2009/10/23 PHP
PHP实现懒加载的方法
2015/03/07 PHP
JavaScript实现滚动栏效果的方法
2015/04/27 PHP
php微信公众号开发之校园图书馆
2018/10/20 PHP
PHP安全之register_globals的on和off的区别
2020/07/23 PHP
JS+CSS实现淡入式焦点图片幻灯切换效果的方法
2015/02/26 Javascript
Javascript函数式编程简单介绍
2015/10/11 Javascript
基于javascript代码检测访问网页的浏览器呈现引擎、平台、Windows操作系统、移动设备和游戏系统
2015/12/03 Javascript
jquery form表单获取内容以及绑定数据
2016/02/24 Javascript
JavaScript+CSS实现的可折叠二级菜单实例
2016/02/29 Javascript
使用postMesssage()实现跨域iframe页面间的信息传递方法
2016/03/29 Javascript
jQuery获取当前点击的对象元素(实现代码)
2016/05/19 Javascript
JS简单实现禁止访问某个页面的方法
2016/09/13 Javascript
vue自定义指令实现v-tap插件
2016/11/03 Javascript
js中的eval()函数把含有转义字符的字符串转换成Object对象的方法
2016/12/02 Javascript
详解Vue自定义过滤器的实现
2017/01/10 Javascript
jQuery插件FusionCharts绘制ScrollColumn2D图效果示例【附demo源码下载】
2017/03/22 jQuery
node+express+ejs使用模版引擎做的一个示例demo
2017/09/18 Javascript
搭建基于express框架运行环境的方法步骤
2018/11/15 Javascript
微信小程序云开发实现增删改查功能
2019/05/17 Javascript
解决Vue在Tomcat8下部署页面不加载的问题
2019/11/12 Javascript
keep-Alive搭配vue-router实现缓存页面效果的示例代码
2020/06/24 Javascript
在Python中使用next()方法操作文件的教程
2015/05/24 Python
Python的Django框架下管理站点的基本方法
2015/07/17 Python
Python实现统计代码行的方法分析
2017/07/12 Python
Python机器学习算法之k均值聚类(k-means)
2018/02/23 Python
Python制作词云图代码实例
2019/09/09 Python
用python的turtle模块实现给女票画个小心心
2019/11/23 Python
python super()函数的基本使用
2020/09/10 Python
程序设计HTML5 Canvas API
2013/04/08 HTML / CSS
泰国Robinson百货官网:购买知名品牌的商品
2020/02/08 全球购物
计算机学生求职信范文
2014/01/30 职场文书
2014年社区植树节活动方案
2014/02/28 职场文书
2015毕业生自我评价范文
2015/03/02 职场文书
消夏晚会主持词
2015/06/30 职场文书
Redis集群的关闭与重启操作
2021/07/07 Redis