一个很方便的 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 相关文章推荐
15个小时----从修改程序到自己些程序
Oct 09 PHP
PHP之COOKIE支持详解
Sep 20 PHP
php+ajax做仿百度搜索下拉自动提示框(有实例)
Aug 21 PHP
基于PHPExcel的常用方法总结
Jun 13 PHP
Thinkphp搜索时首页分页和搜索页保持条件分页的方法
Dec 05 PHP
PHP结合Ueditor并修改图片上传路径
Oct 16 PHP
php 变量引用与变量销毁机制详细介绍
Dec 05 PHP
php获取目录中所有文件名及判断文件与目录的简单方法
Mar 04 PHP
PHP CodeIgniter分页实例及多条件查询解决方案(推荐)
May 20 PHP
php和html的区别点详细总结
Sep 24 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
Feb 27 PHP
THINKPHP5分页数据对象处理过程解析
Oct 28 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 多维数组排序实现代码
2009/08/05 PHP
PHP实现的分页类定义与用法示例
2017/07/05 PHP
Laravel中七个非常有用但很少人知道的Carbon方法
2017/09/21 PHP
ThinkPHP框架实现的邮箱激活功能示例
2018/06/15 PHP
jquery ajax abort()的使用方法
2010/10/28 Javascript
javascript 折半查找字符在数组中的位置(有序列表)
2010/12/09 Javascript
js的一些常用方法小结
2011/06/29 Javascript
jQuery:节点(插入,复制,替换,删除)操作
2013/03/04 Javascript
原生js与jQuery实现简单的tab切换特效对比
2015/07/30 Javascript
快速学习jQuery插件 Cookie插件使用方法
2015/12/01 Javascript
快速解决vue-cli在ie9+中无效的问题
2018/09/04 Javascript
Vue源码探究之虚拟节点的实现
2019/04/17 Javascript
详解50行代码,Node爬虫练手项目
2019/04/22 Javascript
axios实现文件上传并获取进度
2020/03/25 Javascript
vue+element-ui JYAdmin后台管理系统模板解析
2020/07/28 Javascript
再也不怕 JavaScript 报错了,怎么看怎么处理都在这儿
2020/12/09 Javascript
[46:25]DOTA2上海特级锦标赛主赛事日 - 4 败者组第五轮 MVP.Phx VS EG第二局
2016/03/05 DOTA
[01:20]DOTA2 齐天大圣至宝动态展示
2016/12/13 DOTA
Python序列操作之进阶篇
2016/12/08 Python
django foreignkey(外键)的实现
2019/07/29 Python
python 解决Windows平台上路径有空格的问题
2020/11/10 Python
伦敦最著名的老字号百货公司:Selfridges(塞尔福里奇百货)
2016/07/25 全球购物
乐高奥地利官方商店:LEGO Shop AT
2019/07/16 全球购物
Oracle里面常用的数据字典有哪些
2014/02/14 面试题
教育系毕业生中文求职信范文
2013/10/06 职场文书
运动会开幕式主持词
2014/03/28 职场文书
党的群众路线教育实践活动心得体会(企业)
2014/11/03 职场文书
幼儿园老师新年寄语2015
2014/12/08 职场文书
小班教师个人总结
2015/02/05 职场文书
电信营业员岗位职责
2015/04/14 职场文书
2015年小学语文教学工作总结
2015/05/25 职场文书
2015暑假假期总结
2015/07/13 职场文书
golang http使用踩过的坑与填坑指南
2021/04/27 Golang
MySQL深度分页(千万级数据量如何快速分页)
2021/07/25 MySQL
win11无线投屏在哪设置? win11无线投屏功能的使用方法
2022/04/08 数码科技
PostgreSQL基于pgrouting的路径规划处理方法
2022/04/18 PostgreSQL