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中上传大体积文件时需要的设置
Oct 09 PHP
PHP5.2中date()函数显示时间与北京时间相差8小时的解决办法
May 28 PHP
关于php连接mssql:pdo odbc sql server
Jul 20 PHP
php中将数组转成字符串并保存到数据库中的函数代码
Sep 29 PHP
PHP获取访问页面HTTP状态码的实现代码
Nov 03 PHP
Zend Framework过滤器Zend_Filter用法详解
Dec 09 PHP
PHP静态成员变量
Feb 14 PHP
PHP中Cookie的使用详解(简单易懂)
Apr 28 PHP
WHOOPS PHP调试库的使用
Sep 29 PHP
php格式文件打开的四种方法
Feb 24 PHP
PHP析构函数destruct与垃圾回收机制的讲解
Mar 22 PHP
PHP如何通过date() 函数格式化显示时间
Nov 13 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中global和$GLOBALS[]的分析之一
2012/02/02 PHP
php模板原理讲解
2013/11/13 PHP
php中文繁体和简体相互转换的方法
2015/03/21 PHP
php使用timthumb生成缩略图的方法
2016/01/22 PHP
php自定义函数实现二维数组排序功能
2016/07/20 PHP
php 根据自增id创建唯一编号类
2017/04/06 PHP
JavaScript调用后台的三种方法实例
2013/10/17 Javascript
父页面显示遮罩层弹出半透明状态的dialog
2014/03/04 Javascript
jquery防止重复执行动画避免页面混乱
2014/04/22 Javascript
JQuery给网页更换皮肤的方法
2015/05/30 Javascript
JavaScript数据类型判定的总结笔记
2015/07/31 Javascript
JS开发常用工具函数(小结)
2019/07/04 Javascript
nodejs对项目下所有空文件夹创建gitkeep的方法
2019/08/02 NodeJs
layui问题之自动滚动二级iframe页面到指定位置的方法
2019/09/18 Javascript
微信小程序scroll-view实现滚动到锚点左侧导航栏点餐功能(点击种类,滚动到锚点)
2020/06/11 Javascript
[46:28]EG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.23
2019/09/05 DOTA
Python中super的用法实例
2015/05/28 Python
解密Python中的描述符(descriptor)
2015/06/03 Python
python黑魔法之参数传递
2016/02/12 Python
Python实现带百分比的进度条
2016/06/28 Python
Python实现更改图片尺寸大小的方法(基于Pillow包)
2016/09/19 Python
python事件驱动event实现详解
2018/11/21 Python
Django Celery异步任务队列的实现
2019/07/24 Python
python Dijkstra算法实现最短路径问题的方法
2019/09/19 Python
Python实现自动打开电脑应用的示例代码
2020/04/17 Python
如何通过命令行进入python
2020/07/06 Python
Python Opencv实现单目标检测的示例代码
2020/09/08 Python
Python 微信公众号文章爬取的示例代码
2020/11/30 Python
在vscode中启动conda虚拟环境的思路详解
2020/12/25 Python
豪华复古化妆:Besame Cosmetics
2019/09/06 全球购物
Harrods英国:世界领先的奢侈品百货商店
2020/09/23 全球购物
音乐专业应届生教师求职信
2013/11/04 职场文书
迟到检讨书400字
2014/01/13 职场文书
大学生自荐材料范文
2014/12/30 职场文书
校运会通讯稿
2015/07/18 职场文书
2019初中学生入团申请书
2019/06/27 职场文书