一个很方便的 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 相关文章推荐
DedeCms模板安装/制作概述
Mar 11 PHP
PHP性能优化 产生高度优化代码
Jul 22 PHP
解析php中获取系统信息的方法
Jun 25 PHP
php使用codebase生成随机数
Mar 25 PHP
简单实用的网站PHP缓存类实例
Jul 18 PHP
推荐几款用 Sublime Text 开发 Laravel 所用到的插件
Oct 30 PHP
php正则表达式获取内容所有链接
Jul 24 PHP
PHP 实现页面静态化的几种方法
Jul 23 PHP
php 截取中英文混合字符串的方法
May 31 PHP
PHP如何搭建百度Ueditor富文本编辑器
Sep 21 PHP
对php 判断http还是https,以及获得当前url的方法详解
Jan 15 PHP
one.php 多项目、函数库、类库 统一为一个版本的方法
Aug 24 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
自动跳转中英文页面
2006/10/09 PHP
php上传图片之时间戳命名(保存路径)
2014/08/15 PHP
Linux下安装PHP MSSQL扩展教程
2014/10/24 PHP
表单提交错误后返回内容消失问题的解决方法(PHP网站)
2015/10/20 PHP
Windows下PHP开发环境搭建教程(Apache+PHP+MySQL)
2016/06/13 PHP
javascript中&quot;/&quot;运算符常见错误
2010/10/13 Javascript
基于datagrid框架的查询
2013/04/08 Javascript
JavaScript实现继承的4种方法总结
2014/10/16 Javascript
jQuery插件PageSlide实现左右侧栏导航菜单
2015/04/12 Javascript
lhgcalendar时间插件限制只能选择三个月的实现方法
2017/07/03 Javascript
Angular中响应式表单的三种更新值方法详析
2017/08/22 Javascript
JSON数据中存在单个转义字符“\”的处理方法
2018/07/11 Javascript
基于vue cli 通过命令行传参实现多环境配置
2018/07/12 Javascript
[01:03:38]2014 DOTA2国际邀请赛中国区预选赛5.21 CNB VS CIS
2014/05/22 DOTA
[03:49]显微镜下的DOTA2第十五期—VG登基之路完美团
2014/06/24 DOTA
Python3.2中的字符串函数学习总结
2015/04/23 Python
Python使用os模块和fileinput模块来操作文件目录
2016/01/19 Python
Django中利用filter与simple_tag为前端自定义函数的实现方法
2017/06/15 Python
Python 获取当前所在目录的方法详解
2017/08/02 Python
Python实现的人工神经网络算法示例【基于反向传播算法】
2017/11/11 Python
python八大排序算法速度实例对比
2017/12/06 Python
运用TensorFlow进行简单实现线性回归、梯度下降示例
2018/03/05 Python
对Django外键关系的描述
2019/07/26 Python
python GUI库图形界面开发之PyQt5信号与槽机制、自定义信号基础介绍
2020/02/25 Python
python给list排序的简单方法
2020/12/10 Python
利用css3 translate完美实现表头固定效果
2017/02/28 HTML / CSS
Canvas制作旋转的太极的示例
2018/03/09 HTML / CSS
外贸学院会计专业应届生求职信
2013/11/14 职场文书
外贸业务员求职信范文
2013/12/12 职场文书
专业求职信撰写要诀
2014/02/18 职场文书
民事诉讼代理授权委托书范本
2014/10/08 职场文书
八年级作文之我的母亲
2019/12/10 职场文书
MySQL 隔离数据列和前缀索引的使用总结
2021/05/14 MySQL
SpringBoot工程下使用OpenFeign的坑及解决
2021/07/02 Java/Android
一文弄懂MySQL索引创建原则
2022/02/28 MySQL
Vue操作Storage本地化存储
2022/04/29 Vue.js