一个很方便的 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执行速度全攻略(下)
Oct 09 PHP
PHP文件下载类
Dec 06 PHP
PHP+JS无限级可伸缩菜单详解(简单易懂)
Jan 02 PHP
php md5下16位和32位的实现代码
Apr 09 PHP
一个php Mysql类 可以参考学习熟悉下
Jun 21 PHP
thinkphp路由规则使用示例详解和伪静态功能实现(apache重写)
Feb 24 PHP
在SAE上搭建最新wordpress的方法
Dec 21 PHP
php中文繁体和简体相互转换的方法
Mar 21 PHP
将PHP从5.3.28升级到5.3.29时Nginx出现502错误
May 09 PHP
Session 失效的原因汇总及解决丢失办法
Sep 30 PHP
joomla组件开发入门教程
May 04 PHP
Yii框架连表查询操作示例
Sep 06 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/07/12 PHP
php实现的CSS更新类实例
2014/09/22 PHP
php实现随机显示图片方法汇总
2015/05/21 PHP
Laravel执行migrate命令提示:No such file or directory的解决方法
2016/03/16 PHP
PHP扩展Swoole实现实时异步任务队列示例
2019/04/13 PHP
PHP类的自动加载与命名空间用法实例分析
2020/06/05 PHP
在多个页面使用同一个HTML片段《续》
2011/03/04 Javascript
js 得到文件后缀(通过正则实现)
2013/07/08 Javascript
固定网页背景图同时保持图片比例的思路代码
2013/08/15 Javascript
jQuery操作元素css样式的三种方法
2014/06/04 Javascript
Node.js异步I/O学习笔记
2014/11/04 Javascript
html的DOM中document对象forms集合用法实例
2015/01/21 Javascript
文本框只能输入数字的实现方法(兼容IE火狐)
2016/06/25 Javascript
JavaScript性能优化总结之加载与执行
2016/08/11 Javascript
AngularJs  Creating Services详解及示例代码
2016/09/02 Javascript
BootStrap3使用错误记录及解决办法
2016/12/22 Javascript
js实现动态增加文件域表单功能
2018/10/22 Javascript
微信小程序购物车、父子组件传值及calc的注意事项总结
2018/11/14 Javascript
vue 导航内容设置选中状态样式的例子
2019/11/01 Javascript
JavaScript隐式类型转换代码实例
2020/05/29 Javascript
Vue实现小购物车功能
2020/12/21 Vue.js
[01:23:35]Ti4主赛事胜者组 DK vs EG 1
2014/07/19 DOTA
一个月入门Python爬虫学习,轻松爬取大规模数据
2018/01/03 Python
Python对CSV、Excel、txt、dat文件的处理
2018/09/18 Python
在pandas多重索引multiIndex中选定指定索引的行方法
2018/11/16 Python
Python实现正则表达式匹配任意的邮箱方法
2018/12/20 Python
Python代码生成视频的缩略图的实例讲解
2019/12/22 Python
Python利用 utf-8-sig 编码格式解决写入 csv 文件乱码问题
2020/02/21 Python
Python 在 VSCode 中使用 IPython Kernel 的方法详解
2020/09/05 Python
台湾深度自由行旅游平台:Tripbaa趣吧
2017/10/10 全球购物
Roxy荷兰官方网站:冲浪、滑雪板、服装和配件
2019/10/22 全球购物
个人实用简单的自我评价
2013/10/19 职场文书
后勤采购员岗位职责
2013/12/19 职场文书
2014优秀党员事迹材料
2014/08/14 职场文书
工资收入证明样本(5篇)
2014/09/16 职场文书
spring IOC容器的Bean管理XML自动装配过程
2022/05/30 Java/Android