一个很方便的 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+MySQL5.0中文乱码解决方法
Nov 20 PHP
php eval函数用法总结
Oct 31 PHP
php中flush()、ob_flush()、ob_end_flush()的区别介绍
Feb 17 PHP
php post大量数据时发现数据丢失问题解决方法
Jun 20 PHP
PHP经典面试题之设计模式(经常遇到)
Oct 15 PHP
PHP验证码生成原理和实现
Jan 24 PHP
非集成环境的php运行环境(Apache配置、Mysql)搭建安装图文教程
Apr 12 PHP
PHP通过加锁实现并发情况下抢码功能
Aug 10 PHP
PHP文件上传操作实例详解
Sep 27 PHP
php获取文件名称和扩展名的方法
Feb 07 PHP
php魔法函数与魔法常量使用介绍
Jul 23 PHP
Thinkphp页面跳转设置跳转等待时间的操作
Oct 16 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
博士208HAF收音机实习报告
2021/03/02 无线电
php 不同编码下的字符串长度区分
2009/09/26 PHP
php教程之phpize使用方法
2014/02/12 PHP
PHP创建PowerPoint2007文档的方法
2015/12/10 PHP
PHP抽象类基本用法示例
2018/12/28 PHP
超棒的javascript页面顶部卷动广告效果
2007/12/01 Javascript
setAttribute 与 class冲突解决
2008/02/17 Javascript
js判断变量是否空值的代码
2008/10/26 Javascript
网页打开自动最大化的js代码
2012/08/22 Javascript
使用jquery动态加载javascript以减少服务器压力
2012/10/29 Javascript
jQuery 无刷新分页实例代码
2013/11/12 Javascript
显示今天的日期js代码(阳历和农历)
2014/09/30 Javascript
使用jQuery mobile库检测url绝对地址和相对地址的方法
2015/12/04 Javascript
AngularJS表格详解及示例代码
2016/08/17 Javascript
js, jQuery实现全选、反选功能
2017/03/08 Javascript
angularjs指令之绑定策略(@、=、&amp;)
2017/04/13 Javascript
JS 组件系列之BootstrapTable的treegrid功能
2017/06/16 Javascript
angular写一个列表的选择全选交互组件的示例
2018/01/22 Javascript
react native 获取地理位置的方法示例
2018/08/28 Javascript
非常漂亮的js烟花效果
2020/03/10 Javascript
Vue中正确使用Element-UI组件的方法实例
2020/10/13 Javascript
[10:04]国际邀请赛采访专栏:DK.Farseer,mouz.Black^,采访员Josh专访
2013/08/05 DOTA
[01:00:17]DOTA2-DPC中国联赛 正赛 SAG vs Dynasty BO3 第二场 1月25日
2021/03/11 DOTA
linux系统使用python监测网络接口获取网络的输入输出
2014/01/15 Python
linux系统使用python监测系统负载脚本分享
2014/01/15 Python
web.py在SAE中的Session问题解决方法(使用mysql存储)
2015/06/24 Python
详解Python操作RabbitMQ服务器消息队列的远程结果返回
2016/06/30 Python
详解python执行shell脚本创建用户及相关操作
2019/04/11 Python
详解python 爬取12306验证码
2019/05/10 Python
Python3 socket即时通讯脚本实现代码实例(threading多线程)
2020/06/01 Python
浅析Python 中的 WSGI 接口和 WSGI 服务的运行
2020/12/09 Python
css 元素选择器的简单实例
2016/05/23 HTML / CSS
NBA欧洲商店(英国):NBA Europe Store UK
2018/07/27 全球购物
C#实现启动一个进程
2016/10/01 面试题
JAVA程序员面试题
2012/10/03 面试题
网站客服岗位职责
2014/04/05 职场文书