php中DOMDocument简单用法示例代码(XML创建、添加、删除、修改)


Posted in PHP onDecember 19, 2010

共分四个文件,分别是创建、增加、删除、修改四个功能,变量都是写死的,改一改用$_POST方式接收就可以用了
//index.php 创建功能

<?php 
$xmlpatch = 'index.xml'; 
$_id = '1'; 
$_title = 'title1'; 
$_content = 'content1'; 
$_author = 'author1'; 
$_sendtime = 'time1'; 
$_htmlpatch = '1.html'; 
3water.com$doc = new DOMDocument('1.0', 'utf-8'); 
$doc -> formatOutput = true; 
3water.com$root = $doc -> createElement('root');//新建节点 
3water.com$index = $doc -> createElement('index');//新建节点 
3water.com$url = $doc -> createAttribute('url');//新建属性 
$patch = $doc -> createTextNode($_htmlpatch);//新建TEXT值 
$url -> appendChild($patch);//将$patch文本设为$url属性的值 
3water.com$id = $doc -> createAttribute('id'); 
$newsid = $doc -> createTextNode($_id); 
$id -> appendChild($newsid); 
3water.com$title = $doc -> createAttribute('title'); 
$newstitle = $doc -> createTextNode($_title); 
$title -> appendChild($newstitle); 
3water.com$content = $doc -> createTextNode($_content);//节点值 
3water.com$author = $doc -> createAttribute('author'); 
$newsauthor = $doc -> createTextNode($_author); 
$author -> appendChild($newsauthor); 
3water.com$sendtime = $doc -> createAttribute('time'); 
$newssendtime = $doc -> createTextNode($_sendtime); 
$sendtime -> appendChild($newssendtime); 
3water.com$index -> appendChild($id);//将$id设为index节点的属性,以下类同 
$index -> appendChild($title); 
$index -> appendChild($content); 
$index -> appendChild($url); 
$index -> appendChild($author); 
$index -> appendChild($sendtime); 
3water.com$root -> appendChild($index);//设置index为root字节点 
3water.com$doc -> appendChild($root);//设置root为跟节点 
3water.com$doc -> save($xmlpatch);//保存文件 
3water.comecho $xmlpatch . ' has create success'; 
3water.com?> 
3water.com<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>XML操作</title> 
</head> 
3water.com<body> 
</body> 
</html>

//add.php 增加功能(跟index.php文件差不多,主要就是加个load载入跟 $root = $doc -> documentElement获得跟节点
<?php 
$xmlpatch = 'index.xml'; 
$_id = '2'; 
$_title = 'title2'; 
$_content = 'content2'; 
$_author = 'author2'; 
$_sendtime = 'time2'; 
$_htmlpatch = '2.html'; 
3water.com$doc = new DOMDocument(); 
$doc -> formatOutput = true; 
if($doc -> load($xmlpatch)) { 
$root = $doc -> documentElement;//获得根节点(root) 
$index = $doc -> createElement('index'); 
3water.com$url = $doc -> createAttribute('url'); 
$patch = $doc -> createTextNode($_htmlpatch); 
$url -> appendChild($patch); 
3water.com$id = $doc -> createAttribute('id'); 
$newsid = $doc -> createTextNode($_id); 
$id -> appendChild($newsid); 
3water.com$title = $doc -> createAttribute('title'); 
$newstitle = $doc -> createTextNode($_title); 
$title -> appendChild($newstitle); 
3water.com$content = $doc -> createTextNode($_content); 
3water.com$author = $doc -> createAttribute('author'); 
$newsauthor = $doc -> createTextNode($_author); 
$author -> appendChild($newsauthor); 
3water.com$sendtime = $doc -> createAttribute('time'); 
$newssendtime = $doc -> createTextNode($_sendtime); 
$sendtime -> appendChild($newssendtime); 
3water.com$index -> appendChild($id); 
$index -> appendChild($title); 
$index -> appendChild($content); 
$index -> appendChild($url); 
$index -> appendChild($author); 
$index -> appendChild($sendtime); 
3water.com$root -> appendChild($index); 
3water.com$doc -> save($xmlpatch); 
3water.comecho $_id . ' has been added in ' . $xmlpatch; 
3water.com} else { 
echo 'xml file loaded error!'; 
} 
?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>XML操作-添加</title> 
</head> 
3water.com<body> 
</body> 
</html>

//edit.php 修改功能(这里只修改title属性值 跟节点值)
<?php 
$xmlpatch = 'index.xml'; 
$_id = '2'; 
$_title = 'has been changed'; 
$_content = 'has been changed'; 
3water.com$doc = new DOMDocument(); 
$doc -> formatOutput = true; 
3water.comif($doc -> load($xmlpatch)) { 
$root = $doc -> documentElement; 
$elm = $root -> getElementsByTagName('index'); 
$checkexist = 0; 
foreach ($elm as $new) { 
if($new -> getAttribute('id') == $_id) { 
$new -> setAttribute('title', $_title); 
$new -> nodeValue = $_content;//修改节点值,真是太意外了,没想到跟JS一样直接能赋值... 
//$new -> removeChild($new -> nodevalue); 
$checkexist = 1; 
} 
} 
if($checkexist == 0) { 
echo $_id . ' is not found in ' . $xmlpatch; 
} else { 
$doc -> save($xmlpatch); 
echo $_id . ' has been changed'; 
} 
} else { 
echo 'xml file loaded error!'; 
} 
3water.com?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>XML操作-修改</title> 
</head> 
3water.com<body> 
</body> 
</html>

//del.php 删除功能
<?php 
$xmlpatch = 'index.xml'; 
$_id = '2'; 
3water.com$doc = new DOMDocument(); 
$doc -> formatOutput = true; 
if($doc -> load($xmlpatch)) { 
$root = $doc -> documentElement; 
$elm = $root -> getElementsByTagName('index'); 
foreach ($elm as $new) { 
if($new -> getAttribute('id') == $_id) { 
if($root -> removeChild($new)) { 
echo $_id . ' has been deleted'; 
} else { 
echo $_id . ' delete failed'; 
} 
} 
} 
$doc -> save($xmlpatch); 
} else { 
echo 'xml file loaded error!'; 
} 
3water.com?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>XML操作-删除</title> 
</head> 
3water.com<body> 
</body> 
</html>

3water.com
总结一下,创建跟添加主要用的就是create跟appendChild,create后边跟Element就是创建节点,跟Attribute就是创建属性,TextNode就是创建值,然后appendChild就是设置从属关系,这么一看非常简单。删除与修改都是用先获得节点列表getElementsByTagName然后foreach遍历想要修改的节点.
PHP 相关文章推荐
上传文件先创建目录 再上传到目录里面去
Dec 29 PHP
浅析php学习的路线图
Jul 10 PHP
php求两个目录的相对路径示例(php获取相对路径)
Mar 27 PHP
PHP实现PDO的mysql数据库操作类
Dec 12 PHP
ThinkPHP模型详解
Jul 27 PHP
PHP新建类问题分析及解决思路
Nov 19 PHP
总结PHP如何获取当前主机、域名、网址、路径、端口和参数等
Sep 09 PHP
php 浮点数比较方法详解
May 05 PHP
PHP jQuery+Ajax结合写批量删除功能
May 19 PHP
laravel框架路由分组,中间件,命名空间,子域名,路由前缀实例分析
Feb 18 PHP
TP5框架安全机制实例分析
Apr 05 PHP
php 利用socket发送GET,POST请求的实例代码
Jul 04 PHP
PHP与MySQL开发的8个技巧小结
Dec 17 #PHP
hessian 在PHP中的使用介绍
Dec 13 #PHP
php数据入库前清理 注意php intval与mysql的int取值范围不同
Dec 12 #PHP
php 高性能书写
Dec 11 #PHP
php foreach 参数强制类型转换的问题
Dec 10 #PHP
snoopy 强大的PHP采集类使用实例代码
Dec 09 #PHP
PHPwind整合最土系统用户同步登录实现方法
Dec 08 #PHP
You might like
PHP中Session的概念
2006/10/09 PHP
如何将数据从文本导入到mysql
2006/10/09 PHP
PHP解压tar.gz格式文件的方法
2016/02/14 PHP
PHP实现RSA签名生成订单功能【支付宝示例】
2017/06/06 PHP
laravel框架语言包拓展实现方法分析
2019/11/22 PHP
Firefox 无法获取cssRules 的解决办法
2006/10/11 Javascript
javascript EXCEL 操作类代码
2009/07/30 Javascript
javascript对象的使用和属性操作示例详解
2014/03/02 Javascript
结合代码图文讲解JavaScript中的作用域与作用域链
2016/07/05 Javascript
Ajax与服务器(JSON)通信实例代码
2016/11/05 Javascript
vue如何实现observer和watcher源码解析
2017/03/09 Javascript
深入理解JavaScript创建对象的多种方式以及优缺点
2017/06/01 Javascript
浅谈React中组件逻辑复用的那些事儿
2020/05/21 Javascript
从零开始用webpack构建一个vue3.0项目工程的实现
2020/09/24 Javascript
深入理解Python中的元类(metaclass)
2015/02/14 Python
python连接远程ftp服务器并列出目录下文件的方法
2015/04/01 Python
浅谈Python2.6和Python3.0中八进制数字表示的区别
2017/04/28 Python
Python3.6使用tesseract-ocr的正确方法
2018/10/17 Python
python获取当前文件路径以及父文件路径的方法
2019/07/10 Python
Tensorflow模型实现预测或识别单张图片
2019/07/19 Python
使用Python将字符串转换为格式化的日期时间字符串
2019/09/01 Python
CSS3制作漂亮的照片墙的实现代码
2016/06/08 HTML / CSS
CSS3 box-sizing属性详解
2016/11/15 HTML / CSS
HTML5实现经典坦克大战坦克乱走还能发出一个子弹
2013/09/02 HTML / CSS
德国网上药房:Apotal
2017/04/04 全球购物
经典c++面试题二
2015/08/14 面试题
资深财务管理人员自我评价
2013/09/22 职场文书
财务会计专业毕业生自荐信
2013/10/02 职场文书
公司财务自我评价分享
2013/12/17 职场文书
2014年公司植树节活动方案
2014/03/04 职场文书
经典安踏广告词
2014/03/21 职场文书
房产转让协议书
2014/04/11 职场文书
预备党员转正思想汇报
2014/09/26 职场文书
初中美术教学反思
2016/02/17 职场文书
装修安全责任协议书
2016/03/22 职场文书
创新创业项目计划书该怎样写?
2019/08/13 职场文书