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 curl模拟post请求小实例
Nov 13 PHP
PHP中开启gzip压缩的2种方法
Jan 31 PHP
php从给定url获取文件扩展名的方法
Mar 14 PHP
php实现QQ空间获取当前用户的用户名并生成图片
Jul 25 PHP
分享PHP函数实现数字与文字分页代码
Jul 28 PHP
通过PHP简单实例介绍文件上传
Dec 16 PHP
PHP封装函数实现生成随机的字符串验证码
Jan 24 PHP
利用PHPStorm如何开发Laravel应用详解
Aug 30 PHP
Laravel中的Blade模板引擎示例详解
Oct 10 PHP
laravel5表单唯一验证的实例代码
Sep 30 PHP
Laravel 在views中加载公共页面的实现代码
Oct 22 PHP
Laravel框架Eloquent ORM删除数据操作示例
Dec 03 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
实现在同一方法中获取当前方法中新赋值的session值解决方法
2014/06/26 PHP
PHP implode()函数用法讲解
2019/03/08 PHP
php传值和传引用的区别点总结
2019/11/19 PHP
php中加密解密DES类的简单使用方法示例
2020/03/26 PHP
PHP 实现重载
2021/03/09 PHP
学习ExtJS TextField常用方法
2009/10/07 Javascript
javascript 实现 秒杀,团购 倒计时展示的记录 分享
2013/07/12 Javascript
详细介绍8款超实用JavaScript框架
2013/10/25 Javascript
javascript修改表格背景色实例代码分享
2013/12/10 Javascript
jquery dialog open后,服务器端控件失效的快速解决方法
2013/12/19 Javascript
Clipboard.js 无需Flash的JavaScript复制粘贴库
2015/10/02 Javascript
javascript运动框架用法实例分析(实现放大与缩小效果)
2016/01/08 Javascript
JS实现动态表格的添加,修改,删除功能(推荐)
2016/06/15 Javascript
省市二级联动小案例讲解
2016/07/24 Javascript
AngularJS动态生成div的ID源码解析
2016/08/29 Javascript
jQuery操作css样式
2017/05/15 jQuery
vue.js评论发布信息可插入QQ表情功能
2017/08/08 Javascript
angularjs实现天气预报功能
2020/06/16 Javascript
AngularJS模糊查询功能实现代码(过滤内容下拉菜单排序过滤敏感字符验证判断后添加表格信息)
2017/10/24 Javascript
React 路由懒加载的几种实现方案
2018/10/23 Javascript
javascript实现考勤日历功能
2018/11/29 Javascript
JS正则表达式验证端口范围(0-65535)
2020/01/06 Javascript
Vue如何提升首屏加载速度实例解析
2020/06/25 Javascript
JavaScript实现音乐导航效果
2020/11/19 Javascript
[02:13] 完美世界DOTA2联赛PWL DAY5集锦
2020/11/03 DOTA
批处理与python代码混合编程的方法
2016/05/19 Python
Python实现定时备份mysql数据库并把备份数据库邮件发送
2018/03/08 Python
python3.x实现base64加密和解密
2019/03/28 Python
Python datetime模块的使用示例
2021/02/02 Python
HTML5不支持frameset的两种解决方法
2016/11/14 HTML / CSS
思想品德自我鉴定
2013/10/12 职场文书
销售副总经理岗位职责
2013/12/11 职场文书
三查三看党性分析材料
2014/02/18 职场文书
党员“一帮一”活动总结
2015/05/07 职场文书
修改MySQL的数据库引擎为INNODB的方法
2021/05/26 MySQL
MySQL如何使用使用Xtrabackup进行备份和恢复
2021/06/21 MySQL