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 相关文章推荐
基于mysql的论坛(6)
Oct 09 PHP
php获取地址栏信息的代码
Oct 08 PHP
利用PHP实现短域名互转
Jul 05 PHP
PHP扩展模块Pecl、Pear以及Perl的区别
Apr 09 PHP
PHP中unset,array_splice删除数组中元素的区别
Jul 28 PHP
PHP中两个float(浮点数)比较实例分析
Sep 27 PHP
PHP解压tar.gz格式文件的方法
Feb 14 PHP
PHP 7.1新特性的汇总介绍
Dec 16 PHP
thinkphp Apache配置重启Apache1 restart 出错解决办法
Feb 15 PHP
PHP获取当前执行php文件名的代码
Mar 02 PHP
PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
Jun 16 PHP
thinkphp 获取控制器及控制器方法
Apr 16 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下MAIL的另一解决方案
2006/10/09 PHP
BBS(php &amp; mysql)完整版(七)
2006/10/09 PHP
thinkphp模板继承实例简述
2014/11/26 PHP
php浏览历史记录的方法
2015/03/10 PHP
php创建无限级树型菜单
2015/11/05 PHP
PHP实现清除MySQL死连接的方法
2016/07/23 PHP
PHP获取input输入框中的值去数据库比较显示出来
2016/11/16 PHP
PHP 断点续传实例详解
2017/11/11 PHP
PHP实现的字符串匹配算法示例【sunday算法】
2017/12/19 PHP
HTML中Select不用Disabled实现ReadOnly的效果
2008/04/07 Javascript
深入document.write()与HTML4.01的非成对标签的详解
2013/05/08 Javascript
JS获得URL超链接的参数值实例代码
2013/06/21 Javascript
Javascript中判断变量是数组还是对象(array还是object)
2013/08/14 Javascript
Jquery 改变radio/checkbox选中状态,获取选中的值(示例代码)
2013/12/12 Javascript
JS判断字符串长度的5个方法(区分中文和英文)
2014/03/18 Javascript
用js格式化金额可设置保留的小数位数
2014/05/09 Javascript
JavaScript实现动画打开半透明提示层的方法
2015/04/21 Javascript
js禁止页面刷新与后退的方法
2015/06/08 Javascript
前端构建工具之gulp的配置与搭建详解
2017/06/12 Javascript
jQuery实现QQ空间汉字转拼音功能示例
2017/07/10 jQuery
Vue2 Vue-cli中使用Typescript的配置详解
2017/07/24 Javascript
Angularjs 手写日历的实现代码(不用插件)
2017/10/18 Javascript
vue学习笔记之给组件绑定原生事件操作示例
2020/02/27 Javascript
vue下拉刷新组件的开发及slot的使用详解
2020/12/23 Vue.js
[01:02:47]EG vs Secret 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
Python 字典(Dictionary)操作详解
2014/03/11 Python
使用Python脚本在Linux下实现部分Bash Shell的教程
2015/04/17 Python
使用Python实现租车计费系统的两种方法
2018/09/29 Python
详解如何解决使用JSON.stringify时遇到的循环引用问题
2021/03/23 Javascript
《最后的姿势》教学反思
2014/02/27 职场文书
2014镇党委班子对照检查材料思想汇报
2014/09/23 职场文书
个人纪律作风整改措施思想汇报
2014/10/12 职场文书
面试通知短信
2015/04/20 职场文书
2015年信贷员工作总结
2015/04/28 职场文书
PHP中strval()函数实例用法
2021/06/07 PHP
oracle连接ODBC sqlserver数据源的详细步骤
2021/07/25 Oracle