一个很方便的 XML 类!!原创的噢


Posted in PHP onOctober 09, 2006

<?
// 本人不熟悉XML,可能注解对XML的描述有误
// 这只是个思想,要实现的话应该略加修整,可以把一些不常用条件查询的数据用XML保存
// 如虚拟社区的 用户资料,一般只有用户自己或其他用户指定了他的USERNAME才会显示
// 剩下每次都要开启、查询、解释数据集、关闭数据库的消耗。

define("enter",chr(13).chr(10));
class DATA_XML //关键!!!一个自定义类
{
var $parser; //XML解释器
var $tags; //XML标签
var $on; //
var $root; // 根元素
var $Data = array(); // 元素数组

function DATA_XML($filename,$root) //类初始函数 filename文件名,root根元素
{
$this->root = $root; // 初始根元素
$this->parser = xml_parser_create();//创建解释对象
xml_set_object(&$this->parser,&$this);//设置对象
xml_set_element_handler($this->parser,"tag_on","tag_off");//设置元素管理函数
xml_set_character_data_handler($this->parser,"getdata"); //设置数据管理事件
xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, 0);  //要求严格区分大小写

if( file_exists($filename) ) //找到文件吗?
{//找到
$fp = fopen($filename,"r"); // 只读打开
$c  = fread($fp,filesize($filename)); //读取数据
fclose($fp);//关闭
$this->parse($c); //设置解释对象
}
else
{
echo "ooooo"; //!?!好象是调试时用的,去掉 else好了
}

}

function parse($data)//解释函数
{
xml_parse($this->parser,$data);
}

function tag_on($parser,$tag,$attributes)//发现元素触发函数
{
$this->on = true; // 已经触发过
$this->tags = $tag;
//echo $tag;
}

function tag_off($parser,$tag) //元素结素函数
{
$this->on = false; // 元素结素
}

function getdata($parser,$cdata) //取出元素
{
if($this->on && $this->tags!=$this->root)
{//验证一下比较好,(现在是否为元素的开始,并且不是根元素?)

$this->Data[$this->tags]=trim($cdata);
                                           // 关键啊!!用标签做数组表,并给这个数组元素付上数据
//echo trim($cdata);
//echo $this->tags;
//echo "\n";
}
}
function check($str)
{//检查字符
if( strlen($str)<1 )//如果是空字符
return ' ';//返回 ' '
else
return $str;//否则原路返回(不然XML好象会不做结束标记)
}
function saveas($filename)//另存为
{
$c='<?xml version="1.0" encoding="gb2312"?>'.enter;
                            //这个不用说了吧,enter是define("enter",chr(13).chr(10));
$c.="<".$this->root.">".enter;
                            //首先设定一下根元素
for( reset($this->Data);$i=key($this->Data);next($this->Data))
{//开始举出所有数据啦
$c.= "<".$i.">".$this->check($this->Data[$i])."</".$i.">".enter;
// 用数组表名做元素标签,并加上数据内容
}
//echo $c;
$c.="</".$this->root.">".enter;//结束标签
$fp = fopen( $filename , "w" );//写入文件
fwrite($fp,$c);
fclose($fp);

}
};

/*新键一个XML文件
           $xml = new DATA_XML(路径."arm.xml","DATA"/*根元素*/);
$xml->Data["UserName"]="关羽";
           $xml->Data["Nick"]="关云长";
$xml->saveas( 路径."arm.xml");
           unset( $xml );
           // 读取一个文件
           $xml = new DATA_XML(路径."arm.xml","DATA");
           echo $xml->Data["Nick"];//显示一下?
           $xml->Data["Nick"]="关老爷";//UPDATE
           $xml->Data["Master"]="刘备";//INSERT INTO
           $xml->saveas(路径."arm.xml");//另存为覆盖本身
*/
?> 

PHP 相关文章推荐
PHP中的CMS的涵义
Mar 11 PHP
如何使用Linux的Crontab定时执行PHP脚本的方法
Dec 19 PHP
php准确获取文件MIME类型的方法
Jun 17 PHP
PHP抽奖算法程序代码分享
Oct 08 PHP
简单了解PHP编程中数组的指针的使用
Nov 30 PHP
PHP简单遍历对象示例
Sep 28 PHP
PHP生成图片缩略图类示例
Jan 12 PHP
PHP设计模式之工厂模式实例总结
Sep 01 PHP
thinkPHP5框架设置404、403等http状态页面的方法
Jun 05 PHP
php unlink()函数使用教程
Jul 12 PHP
php实现登录页面的简单实例
Sep 29 PHP
Laravel框架下载,安装及路由操作图文详解
Dec 04 PHP
提问的智慧(2)
Oct 09 #PHP
PHP的FTP学习(二)[转自奥索]
Oct 09 #PHP
在PHP中利用XML技术构造远程服务(上)
Oct 09 #PHP
在PHP中利用XML技术构造远程服务(下)
Oct 09 #PHP
把从SQL中取出的数据转化成XMl格式
Oct 09 #PHP
JAVA/JSP学习系列之四
Oct 09 #PHP
JAVA/JSP学习系列之二
Oct 09 #PHP
You might like
Windows下PHP开发环境搭建教程(Apache+PHP+MySQL)
2016/06/13 PHP
php实现常见图片格式的水印和缩略图制作(面向对象)
2016/06/15 PHP
php 计算两个时间相差的天数、小时数、分钟数、秒数详解及实例代码
2016/11/09 PHP
解决form中action属性后面?传递参数 获取不到的问题
2017/07/21 PHP
PHP常用字符串函数小结(推荐)
2018/08/05 PHP
jquery中动态效果小结
2010/12/16 Javascript
jQuery中:contains选择器用法实例
2014/12/30 Javascript
浅谈JavaScript中setInterval和setTimeout的使用问题
2015/08/01 Javascript
JS实现按比例缩放图片的方法(附C#版代码)
2015/12/08 Javascript
JavaScript的Backbone.js框架的一些使用建议整理
2016/02/14 Javascript
【经典源码收藏】基于jQuery的项目常见函数封装集合
2016/06/07 Javascript
js 实现数值的千分位及保存小数方法(推荐)
2016/08/01 Javascript
JS实现的手机端精简幻灯片效果
2016/09/05 Javascript
jQuery实现选项卡功能(两种方法)
2017/03/08 Javascript
前端主流框架vue学习笔记第二篇
2017/07/26 Javascript
vue 使用Jade模板写html,stylus写css的方法
2018/02/23 Javascript
[01:05:59]Mineski vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.22
2019/09/05 DOTA
python读取word文档的方法
2015/05/09 Python
Python之父谈Python的未来形式
2016/07/01 Python
python面向对象_详谈类的继承与方法的重载
2017/06/07 Python
Django框架多表查询实例分析
2018/07/04 Python
python实现二级登陆菜单及安装过程
2019/06/21 Python
Python实现 PS 图像调整中的亮度调整
2019/06/28 Python
python3.x+pyqt5实现主窗口状态栏里(嵌入)显示进度条功能
2019/07/04 Python
python Socket网络编程实现C/S模式和P2P
2020/06/22 Python
python用700行代码实现http客户端
2021/01/14 Python
现代生活方式的家具和装饰:Dot & Bo
2018/12/26 全球购物
竞争性谈判邀请书
2014/02/06 职场文书
生日主持词
2014/03/20 职场文书
法院信息化建设方案
2014/05/21 职场文书
2014年建筑工程工作总结
2014/12/03 职场文书
总经理检讨书范文
2015/02/16 职场文书
幼师求职自荐信
2015/03/26 职场文书
销售督导岗位职责
2015/04/10 职场文书
晚会开幕词范文
2016/03/04 职场文书
纯CSS打字动画的实现示例
2022/08/05 HTML / CSS