一个很方便的 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 获取mysql数据库信息代码
Mar 12 PHP
php 验证码实例代码
Jun 01 PHP
php使用websocket示例详解
Mar 12 PHP
destoon设置自定义搜索的方法
Jun 21 PHP
zen cart实现订单中增加paypal中预留电话的方法
Jul 12 PHP
PHP XML和数组互相转换详解
Oct 26 PHP
Zend Framework使用Zend_Loader组件动态加载文件和类用法详解
Dec 09 PHP
PHP的自定义模板引擎
Mar 24 PHP
yii2.0整合阿里云oss的示例代码
Sep 19 PHP
Laravel 加载第三方类库的方法
Apr 20 PHP
PHP输出Excel PHPExcel的方法
Jul 26 PHP
解决laravel(5.5)访问public报错的问题
Oct 12 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
PHP 配置open_basedir 让各虚拟站点独立运行
2009/11/12 PHP
jQuery getJSON 处理json数据的代码
2010/07/26 Javascript
基于jquery的15款幻灯片插件
2011/04/10 Javascript
页面调用单个swf文件,嵌套出多个方法。
2011/11/21 Javascript
IE8提示Invalid procedure call or argument 异常的解决方法
2012/09/30 Javascript
js判断FCKeditor内容是否为空的两种形式
2013/05/14 Javascript
jQuery动画效果-fadeIn fadeOut淡入浅出示例代码
2013/08/28 Javascript
Firefox和IE兼容性问题及解决方法总结
2013/10/08 Javascript
jquery自定义函数的多种方法
2014/01/09 Javascript
删除节点的jquery代码
2014/01/13 Javascript
jquery搜索框效果实现方法
2015/01/16 Javascript
原生js与jQuery实现简单的tab切换特效对比
2015/07/30 Javascript
理解javascript中的Function.prototype.bind的方法
2017/02/03 Javascript
如何给ss bash 写一个 WEB 端查看流量的页面
2017/03/23 Javascript
Vue中使用Sortable的示例代码
2018/04/07 Javascript
JS装饰器函数用法总结
2018/04/21 Javascript
Echarts动态加载多条折线图的实现代码
2019/05/24 Javascript
利用Python绘制MySQL数据图实现数据可视化
2015/03/30 Python
Python利用正则表达式匹配并截取指定子串及去重的方法
2015/07/30 Python
使用Python编写一个最基础的代码解释器的要点解析
2016/07/12 Python
django admin添加数据自动记录user到表中的实现方法
2018/01/05 Python
python开头的coding设置方法
2019/08/08 Python
python机器学习库xgboost的使用
2020/01/20 Python
python3 配置logging日志类的操作
2020/04/08 Python
装上这 14 个插件后,PyCharm 真的是无敌的存在
2021/01/11 Python
python中常用的数据结构介绍
2021/01/12 Python
美国最大的烧烤架和户外生活用品专业零售商:Barbeques Galore
2021/01/09 全球购物
大学生党课思想汇报
2013/12/29 职场文书
运动会入场词50字
2014/02/20 职场文书
服装店营销方案
2014/03/10 职场文书
副科竞争上岗演讲稿
2014/05/12 职场文书
分公司总经理岗位职责
2014/08/03 职场文书
法人委托书范本
2014/09/15 职场文书
校园游戏活动新闻稿
2014/10/15 职场文书
关于办理居住证的介绍信模板
2019/11/27 职场文书
Python的三个重要函数详解
2022/01/18 Python