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 相关文章推荐
967 个函式
Oct 09 PHP
一个PHP模板,主要想体现一下思路
Dec 25 PHP
PHP iconv 解决utf-8和gb2312编码转换问题
Apr 12 PHP
PHP导出MySQL数据到Excel文件(fputcsv)
Jul 03 PHP
需要注意的几个PHP漏洞小结
Feb 05 PHP
简单谈谈php中的unicode和utf8编码
Jun 10 PHP
PHP实现搜索相似图片
Sep 22 PHP
php实现购物车功能(上)
Jul 23 PHP
PHP入门教程之面向对象基本概念实例分析
Sep 11 PHP
浅谈php中curl、fsockopen的应用
Dec 10 PHP
php实现将数据做成json的格式给前端使用
Aug 21 PHP
Vagrant(WSL)+PHPStorm+Xdebu 断点调试环境搭建
Dec 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
谈一谈收音机的高放电路
2021/03/02 无线电
phpexcel导出excel的颜色和网页中的颜色显示不一致
2012/12/11 PHP
php实现与erlang的二进制通讯实例解析
2014/07/23 PHP
PHP贪婪算法解决0-1背包问题实例分析
2015/03/23 PHP
Thinkphp5.0框架的Db操作实例分析【连接、增删改查、链式操作等】
2019/10/11 PHP
PHP保存Base64图片base64_decode的问题整理
2019/11/04 PHP
禁止JQuery中的load方法装载IE缓存中文件的方法
2009/09/11 Javascript
MooBox 基于Mootools的对话框插件
2012/01/20 Javascript
jQuery使用load()方法载入另外一个网页文件内的指定标签内容到div标签的方法
2015/03/25 Javascript
jQuery移动web开发之页面跳转和加载外部页面的实现
2015/12/04 Javascript
Jquery Easyui日历组件Calender使用详解(23)
2016/12/18 Javascript
react 父组件与子组件之间的值传递的方法
2017/09/14 Javascript
ES6学习教程之块级作用域详解
2017/10/09 Javascript
react-redux中connect的装饰器用法@connect详解
2018/01/13 Javascript
vue.js轮播图组件使用方法详解
2018/07/03 Javascript
Vue2.X 通过AJAX动态更新数据
2018/07/17 Javascript
使用JS判断移动端手机横竖屏状态
2018/07/30 Javascript
浅谈JavaScript 代码整洁之道
2018/10/23 Javascript
Vue Extends 扩展选项用法完整实例
2019/09/17 Javascript
JavaScript 实现自己的安卓手机自动化工具脚本(推荐)
2020/05/13 Javascript
Postman内建变量常用方法实例解析
2020/07/28 Javascript
Python smtplib实现发送邮件功能
2018/05/22 Python
python实现网页自动签到功能
2019/01/21 Python
python爬取微信公众号文章的方法
2019/02/26 Python
深入解析Python小白学习【操作列表】
2019/03/23 Python
Python Django框架模板渲染功能示例
2019/11/08 Python
如何定义TensorFlow输入节点
2020/01/23 Python
python中的socket实现ftp客户端和服务器收发文件及md5加密文件
2020/04/01 Python
keras model.fit 解决validation_spilt=num 的问题
2020/06/19 Python
英国领先的男士服装和时尚零售商:Burton
2017/01/09 全球购物
NFL欧洲商店(德国):NFL Europe Shop DE
2018/11/03 全球购物
新闻学专业应届生求职信
2013/11/08 职场文书
采购内勤岗位职责
2013/12/10 职场文书
2014年小学元旦活动方案
2014/02/12 职场文书
学校综治宣传月活动总结
2014/07/02 职场文书
深入理解MySQL中MVCC与BufferPool缓存机制
2022/05/25 MySQL