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读取RSS feed的代码
Aug 01 PHP
PHP 危险函数全解析
Sep 09 PHP
php中批量删除Mysql中相同前缀的数据表的代码
Jul 01 PHP
PHP使用memcache缓存技术提高响应速度的方法
Dec 26 PHP
android上传图片到PHP的过程详解
Aug 03 PHP
如何使用微信公众平台开发模式实现多客服
Jan 06 PHP
简单谈谈php延迟静态绑定
Jan 26 PHP
详解PHP的Yii框架中扩展的安装与使用
Apr 01 PHP
示例详解Laravel的注册重构
Aug 14 PHP
Yii2框架BootStrap样式的深入理解
Nov 07 PHP
PHP+Ajax实现的检测用户名功能简单示例
Feb 12 PHP
PHP数组访问常用方法解析
Sep 05 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
苏联队长,苏联超人蝙蝠侠,这些登场的“山寨”英雄真的很严肃
2020/04/09 欧美动漫
通过ICQ网关发送手机短信的PHP源程序
2006/10/09 PHP
php知道与问问的采集插件代码
2010/10/12 PHP
单点登录 Ucenter示例分析
2013/10/29 PHP
php上传图片并压缩的实现方法
2015/12/22 PHP
php7安装mongoDB扩展的方法分析
2017/08/02 PHP
去除链接虚线全面分析总结
2006/08/15 Javascript
与jquery serializeArray()一起使用的函数,主要来方便提交表单
2011/01/31 Javascript
Tab切换组件(选项卡功能)实例代码
2013/11/21 Javascript
初识Node.js
2014/09/03 Javascript
AngularJS基础 ng-value 指令简单示例
2016/08/03 Javascript
Node.js 数据加密传输浅析
2016/11/16 Javascript
JavaScript评论点赞功能的实现方法
2017/03/13 Javascript
Laravel整合Bootstrap 4的完整方案(推荐)
2018/01/25 Javascript
解决vue2中使用axios http请求出现的问题
2018/03/05 Javascript
常见的浏览器存储方式(cookie、localStorage、sessionStorage)
2019/05/07 Javascript
解决vue更新路由router-view复用组件内容不刷新的问题
2019/11/04 Javascript
解决vue cli4升级sass-loader(v8)后报错问题
2020/07/30 Javascript
利用Python开发微信支付的注意事项
2016/08/19 Python
python opencv实现图片旋转矩形分割
2018/07/26 Python
Pycharm 设置默认头的图文教程
2019/01/17 Python
深入了解如何基于Python读写Kafka
2019/12/31 Python
python使用梯度下降算法实现一个多线性回归
2020/03/24 Python
Django models文件模型变更错误解决
2020/05/11 Python
python 获取字典特定值对应的键的实现
2020/09/29 Python
web页面录屏实现
2019/02/12 HTML / CSS
DC Shoes官网:美国滑板鞋和服饰品牌
2017/09/03 全球购物
德国机车企业:FC-Moto
2017/10/27 全球购物
迪卡侬比利时官网:Decathlon比利时
2019/12/28 全球购物
太太口服液广告词
2014/03/20 职场文书
感恩母亲节演讲稿
2014/05/07 职场文书
节能减耗标语
2014/06/21 职场文书
优秀团队申报材料
2014/12/26 职场文书
2016元旦晚会主持词
2015/07/01 职场文书
MySql新手入门的基本操作汇总
2021/05/13 MySQL
Vue Element plus使用方法梳理
2022/12/24 Vue.js