一个很方便的 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设计模式 Proxy (代理模式)
Jun 26 PHP
PHP正确配置mysql(apache环境)
Aug 28 PHP
关于php操作mysql执行数据库查询的一些常用操作汇总
Jun 24 PHP
PHP中使用sleep函数实现定时任务实例分享
Aug 21 PHP
PHP识别二维码的方法(php-zbarcode安装与使用)
Jul 07 PHP
PHP使用curl函数发送Post请求的注意事项
Nov 26 PHP
PHP进程通信基础之信号量与共享内存通信
Feb 19 PHP
php防止sql注入的方法详解
Feb 20 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
Jul 19 PHP
PHP实现图片压缩
Sep 09 PHP
laravel 使用auth编写登录的方法
Sep 30 PHP
Laravel 修改默认日志文件名称和位置的例子
Oct 17 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
实用函数4
2007/11/08 PHP
WINDOWS下php5.2.4+mysql6.0+apache2.2.4+ZendOptimizer-3.3.0配置
2008/03/28 PHP
PHP连接SQLServer2005 的问题解决方法
2010/07/19 PHP
PHP编程函数安全篇
2013/01/08 PHP
Thinkphp中import的几个用法详细介绍
2014/07/02 PHP
php判断访问IP的方法
2015/06/19 PHP
php mysql 封装类实例代码
2016/09/18 PHP
Extjs学习笔记之六 面版
2010/01/08 Javascript
JavaScript中的面向对象介绍
2012/06/30 Javascript
JS关键字球状旋转效果的实例代码
2013/11/29 Javascript
href下载文件根据id取url并下载
2014/05/28 Javascript
jQuery实用函数用法总结
2014/08/29 Javascript
巧用canvas
2017/01/21 Javascript
微信小程序 图片加载(本地,网路)实例详解
2017/03/10 Javascript
Vue 中文本内容超出规定行数后展开收起的处理的实现方法
2019/04/28 Javascript
JS数据类型(基本数据类型、引用数据类型)及堆和栈的区别分析
2020/03/04 Javascript
关于javascript中的promise的用法和注意事项(推荐)
2021/01/15 Javascript
[06:50]DSPL次级职业联赛十强晋级之路
2014/11/18 DOTA
python中偏函数partial用法实例分析
2015/07/08 Python
Python编程之列表操作实例详解【创建、使用、更新、删除】
2017/07/22 Python
30秒轻松实现TensorFlow物体检测
2018/03/14 Python
Python : turtle色彩控制实例详解
2020/01/19 Python
Python3 selenium 实现QQ群接龙自动化功能
2020/04/17 Python
python中altair可视化库实例用法
2021/01/26 Python
HTML5使用ApplicationCache接口实现离线缓存技术解决离线难题
2012/12/13 HTML / CSS
Vans(范斯)德国官网:美国南加州的原创极限运动潮牌
2017/05/02 全球购物
请用用Java代码写一个堆栈
2012/01/26 面试题
上班睡觉检讨书
2014/01/09 职场文书
爱心捐款倡议书
2014/04/14 职场文书
财会专业毕业生自荐信
2014/07/09 职场文书
国防教育标语
2014/10/08 职场文书
2014年驻村干部工作总结
2014/11/17 职场文书
大学生求职信怎么写
2015/03/19 职场文书
初中语文教学反思范文
2016/03/03 职场文书
预备党员的思想汇报,你真的会写吗?
2019/06/28 职场文书
解决Maven项目中 Invalid bound statement 无效的绑定问题
2021/06/15 Java/Android