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 程式大小
Dec 06 PHP
PHP写入WRITE编码为UTF8的文件的实现代码
Jul 07 PHP
php 将excel导入mysql
Nov 09 PHP
探讨方法的重写(覆载)详解
Jun 08 PHP
web server使用php生成web页面的三种方法总结
Oct 28 PHP
几道坑人的PHP面试题 试试看看你会不会也中招
Aug 19 PHP
php创建session的方法实例详解
Jan 27 PHP
php延迟静态绑定实例分析
Feb 08 PHP
thinkphp下MySQL数据库读写分离代码剖析
Apr 18 PHP
PHP下载文件函数与用法示例
Sep 27 PHP
laravel实现Auth认证,登录、注册后的页面回跳方法
Sep 30 PHP
使用php的mail()函数实现发送邮件功能
Jun 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
php生成随机数或者字符串的代码
2008/09/05 PHP
php 数组使用详解 推荐
2011/06/02 PHP
PHP优于Node.js的五大理由分享
2012/09/15 PHP
php导入导出excel实例
2013/10/25 PHP
Linux系统递归生成目录中文件的md5的方法
2015/06/29 PHP
PHP实现全角字符转为半角方法汇总
2015/07/09 PHP
Symfony2安装的方法(2种方法)
2016/02/04 PHP
PHP模拟post提交数据方法汇总
2016/02/16 PHP
php网页版聊天软件实现代码
2016/08/12 PHP
PHP实现打包下载文件的方法示例
2017/10/07 PHP
php日志函数error_log用法实例分析
2019/09/23 PHP
laravel清除视图缓存的代码
2019/10/23 PHP
php正则表达式使用方法整理集合
2020/01/31 PHP
原生javascript实现图片按钮切换
2015/01/12 Javascript
jQuery easyui刷新当前tabs的方法
2016/09/23 Javascript
canvas 弹幕效果(实例分享)
2017/01/11 Javascript
详解Angular2中Input和Output用法及示例
2017/05/21 Javascript
在vue中安装使用vux的教程详解
2018/09/16 Javascript
es6 filter() 数组过滤方法总结
2019/04/03 Javascript
Vue路由模块化配置的完整步骤
2019/08/14 Javascript
用于统计项目中代码总行数的Python脚本分享
2015/04/21 Python
python中学习K-Means和图片压缩
2017/11/20 Python
Linux CentOS7下安装python3 的方法
2018/01/21 Python
Python requests模块实例用法
2019/02/11 Python
Python Pandas 如何shuffle(打乱)数据
2019/07/30 Python
Python3.7实现验证码登录方式代码实例
2020/02/14 Python
python中的错误如何查看
2020/07/08 Python
利用CSS3的flexbox实现水平垂直居中与三列等高布局
2016/09/12 HTML / CSS
美国高品质个性化珠宝销售网站:Jewlr
2018/05/03 全球购物
工程概预算专业毕业生求职信
2013/10/04 职场文书
计算机专业学生的自我评价
2013/12/15 职场文书
工会工作先进事迹
2014/08/18 职场文书
通知函格式范文
2015/04/27 职场文书
朋友圈早安励志语录!
2019/07/08 职场文书
Tomcat执行startup.bat出现闪退的原因及解决办法
2022/04/20 Servers
使用CSS实现六边形的图片效果
2022/08/05 HTML / CSS