一个很方便的 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动态生成VRML网页
Oct 09 PHP
php join函数应用
May 04 PHP
php设计模式 Delegation(委托模式)
Jun 26 PHP
浅析Yii中使用RBAC的完全指南(用户角色权限控制)
Jun 20 PHP
PHP的preg_match匹配字符串长度问题解决方法
May 03 PHP
在Yii框架中使用PHP模板引擎Twig的例子
Jun 13 PHP
MacOS 安装 PHP的图片裁剪扩展Tclip
Mar 25 PHP
基于PHP实现假装商品限时抢购繁忙的效果
Oct 16 PHP
学习php设计模式 php实现工厂模式(factory)
Dec 07 PHP
php导出csv文件,可导出前导0实例代码
Nov 16 PHP
php面向对象的用户登录身份验证
Jun 08 PHP
linux mint下安装phpstorm2020包括JDK部分的教程详解
Sep 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
ubuntu 编译安装php 5.3.3+memcache的方法
2010/08/05 PHP
PHP连接MongoDB示例代码
2012/09/06 PHP
Symfony2针对输入时间进行查询的方法分析
2017/06/28 PHP
PHP获取远程http或ftp文件的md5值的方法
2019/04/15 PHP
php+mysql实现的无限分类方法类定义与使用示例
2020/05/27 PHP
Firefox window.close()的使用注意事项
2009/04/11 Javascript
IE与Firefox在JavaScript上的7个不同写法小结
2009/09/14 Javascript
AngularJS语法详解(续)
2015/01/23 Javascript
jQuery使用$.ajax进行即时验证的方法
2015/12/08 Javascript
js创建对象的方法汇总
2016/01/07 Javascript
javascript 数组的定义和数组的长度
2016/06/07 Javascript
JS 日期与时间戮相互转化的简单实例
2016/06/22 Javascript
NODE.JS跨域问题的完美解决方案
2016/10/20 Javascript
javascript高级模块化require.js的具体使用方法
2017/10/31 Javascript
Node.js操作系统OS模块用法分析
2019/01/04 Javascript
javascript面向对象程序设计实践常用知识点总结
2019/07/29 Javascript
详解BootStrap表单验证中重置BootStrap-select验证提示不清除的坑
2019/09/17 Javascript
原生js+canvas实现下雪效果
2020/08/02 Javascript
JS指定音频audio在某个时间点进行播放
2020/11/28 Javascript
Python  pip安装lxml出错的问题解决办法
2017/02/10 Python
django中send_mail功能实现详解
2018/02/06 Python
python 将list转成字符串,中间用符号分隔的方法
2018/10/23 Python
Python Pandas 如何shuffle(打乱)数据
2019/07/30 Python
Python中的相关分析correlation analysis的实现
2019/08/29 Python
css3中仿放大镜效果的几种方式原理解析
2020/12/03 HTML / CSS
阿迪达斯香港官网:adidas香港
2019/11/09 全球购物
linux面试题参考答案(2)
2015/12/06 面试题
团结演讲稿范文
2014/05/23 职场文书
党员教师群众路线对照检查材料思想汇报
2014/09/29 职场文书
酒店服务员岗位职责
2015/02/09 职场文书
小学数学继续教育研修日志
2015/11/13 职场文书
乡镇干部学习心得体会
2016/01/23 职场文书
三八红旗手先进事迹材料(2016推荐版)
2016/02/25 职场文书
教你如何用Python实现人脸识别(含源代码)
2021/06/23 Python
数据分析数据库ClickHouse在大数据领域应用实践
2022/04/03 MySQL
MySQL的存储过程和相关函数
2022/04/26 MySQL