• ----:)欢迎访问源码网(:----
    • 首页
    • 博客
    • 学院
    • 下载
    • 论坛
    • 影视
    • 发布源码
    • RSS
    • ITPig
    • 笑话网
    • 百家姓
    • 繁體中文

源码网 - 中国第一源码门户
选择镜像:网通镜像 - 电信主站
  • 首 页
  • 新闻动态
  • 网站运营
  • 网页制作
  • WEB开发
  • 编程开发
  • 图像媒体
  • 操作系统
  • 数据库
  • 服务器
热门搜索 优化 SEO 故事 cms IIS7 MySQL 个人 AdSense 主题推广 | 文章搜索: 高级搜索
会员登录/控制面版您的位置: 学院首页 >> WEB开发 >> PHP 开发 >> PHP代码 >> 详细内容
 

推荐文章

 
 

热点文章

  • 3389远程服务器GHOST的视频教程
  • 利用纯真QQIP数据库做快速IP归属地查询
  • 天气预报小偷,根据IP自动判断地址
  • php在线文本编辑器
  • 实例(Smarty+FCKeditor新闻系统)
  • php里实现汉字转区位码
  • 对dvbbs.php 全文搜索的完全分析
  • php生成会动的gif图片代码
  • php的字符编码转换工具
  • DIV+CSS+PHP巨献——网页内容先竖排再横排
  • PHP获取网卡的MAC地址
  • 56.com视频采集接口程序(PHP)
 
 

相关文章

  • editplus中使用正则进行替换查找
  • 请正则走开!
 
 

百度搜索

 
 

发一个XML操作类(正则版)

  • 阅览次数:
  • 文章来源: CP整理
  • 原文作者:
  • 整理日期: 2008-08-15
  • 发表评论
  • 字体大小:
  • 小
  • 中
  • 大

在网上没找到合适的操作XML的类,PHP又对DOM、XPATH支持不好,但又需要用到,于是自己写了一个,提供增删改查功能,可以当做小型的数据库使
先置顶几天 :)

CODE:  
<?php
/*
*作者:pangmen
*日期:2007-11-14
*功能:操作XML文件(增、删、改、查)
*版本:正则版
*附:大家可以随意修改此类,合适的话发我一份:)
*   我的E-mail:ad2008bobo@yahoo.com.cn
*/

class OpXML
{
        private $fpath;
        private $enter;
        private $root;

        function __construct($root,$fpath)
        {
                $this->fpath=$fpath;
                $this->root=$root;
                $this->enter=chr(13).chr(10);
                $this->checkFile();
        }

        /*
        *函数名:insert
        *说明:插入一条记录
        */
        public function insert($fields)
        {
                $content=$this->getFileContent();
                preg_match_all('|<key>(\d+?)<\/key>|',$content,$matches);
                rsort($matches[1]);
                $newkey=$matches[1][0]+1;
               
                $record='<record>'.$this->enter;
                $record.='<key>'.$newkey.'</key>'.$this->enter;
                foreach($fields as $k=>$v)
                {
                        $record.="<$k>$v</$k>".$this->enter;
                }
                $record.='</record>'.$this->enter.$this->enter;
                $this->save(preg_replace('/(?=<\/'.$this->root.'>)/',$record,$content));
                return true;
        }

        /*
        *函数名:checkFile
        *说明:如果文件不存在,则创建之,并初始化
        *     否则检查文件规则是否被破坏
        */
        private function checkFile()
        {
                if(!file_exists($this->fpath))
                {
                        $xmlstr='';
                        $xmlstr='<?xml version="1.0" encoding="UTF-8"?>'.$this->enter;
                        $xmlstr.='<'.$this->root.'>'.$this->enter.$this->enter;
                        $xmlstr.='</'.$this->root.'>';
                        $this->save($xmlstr);
                }
                else
                {
                        $content=$this->getFileContent();
                        $bool_statement=preg_match('/<\?xml version="1\.0".*?\?>/',$content)==0 ? false : true;
                        $bool_root=preg_match('/<'.$this->root.'>.*<\/'.$this->root.'>/s',$content)==0 ? false : true;

                        preg_match_all('|(<record>(?:.+?)<\/record>)|s',$content,$matches);
                        for($i=0;$i<count($matches[1]);$i++)
                        {
                                $re='/^<record>\s*<key>(\d+)<\/key>\s*[\s\S]*\s*<\/record>$/';
                                $bool_record=preg_match($re,$matches[1][$i],$arr)==0 ? false : true;
                                $keys[]=$arr[1];
                                if(!$bool_record) break;
                        }
                        rsort($keys);
                        $bool_repeat=preg_match('/(\d),\1/',join(',',$keys),$wb)==0 ? true : false;

                        if(!($bool_statement && $bool_root && $bool_record && $bool_repeat))
                        {
                                echo '文件规则已被破坏';
                                exit;
                        }
                }
        }

        /*
        *函数名:getRecordById
        *说明:根据主键ID,获取字段信息
        */
        public function getRecordById($id)
        {
                $content=$this->getFileContent();
                preg_match('/<record>(\s*<key>'.$id.'<\/key>.+?)<\/record>/s',$content,$matches);
                preg_match_all('|(<.+</.+>)|',$matches[1],$arr);
                $arrstr='';
                for($i=0;$i<count($arr[1]);$i++)
                {
                        preg_match('/^.+>(.+)<\/(.+)>/',$arr[1][$i],$farr);
                        $arrstr.="'$farr[2]'=>'$farr[1]'";
                        if($i<count($arr[1])-1) $arrstr.=',';
                }
                eval("\$row=array($arrstr);");
                return $row;
        }

        /*
        *函数名:checkFile
        *说明:根据主键ID,更新字段
        */
        public function updateRecordById($id,$form_arr=array())
        {
                $content=$this->getFileContent();
                foreach($form_arr as $k=>$v)
                {
                        $re='/(<key>'.$id.'<\/key>[\s\S]*?<'.$k.'>).+?(<\/'.$k.'>)/s';
                        $content=preg_replace($re,'${1}'.$v.'$2',$content);
                }
                $this->save($content);
                return true;
        }

        public function deleteRecordById($id)
        {
                $content=$this->getFileContent();
                $content=preg_replace('/<record>\s*<key>'.$id.'+.+?<\/record>(\s{4})?/s','',$content);
                $this->save($content);
        }

        /*
        *函数名:getList
        *说明:获取所有记录,返回一个二维数组
        *     先获取所有record记录,再获取字段名和值
        */
        public function getList()
        {
                $content=$this->getFileContent();
                $rs=array();
                preg_match_all('|<record>(.+?)<\/record>|s',$content,$matches);
                for($i=0;$i<count($matches[1]);$i++)
                {
                        preg_match_all('|(<.+</.+>)|',$matches[1][$i],$tmparr);
                        $arrstr='';
                        for($j=0;$j<count($tmparr[1]);$j++)
                        {
                                preg_match('/^.+>(.+)<\/(.+)>/',$tmparr[1][$j],$farr);
                                $arrstr.="'$farr[2]'=>'$farr[1]'";
                                if($j<count($tmparr[1])-1) $arrstr.=',';
                        }
                        eval("\$rs[]=array($arrstr);");
                }
                return $rs;
        }

        private function getFileContent()
        {
                $hd=fopen($this->fpath,'r');
                $content=fread($hd,filesize($this->fpath));
                fclose($hd);
                return $content;
        }

        private function save($content)
        {
                $hd=fopen($this->fpath,'w');
                fwrite($hd,$content);
                fclose($hd);
        }
}
?>
下面是应用示例:
CODE:  
header('content-type: text/html; charset=utf-8');

include('./libs/x.class.php');

$rootname='ROOT';//根标签名
$fpath='./libs/ooooooooooooooo.xml';//文件的路径,不用手动创建文件
$x=new OpXML('ROOT',$fpath);

//增
$arr=array('username'=>'pangmen','sex'=>'男','tel'=>'139999999','address'=>'北京');
$x->insert($arr);

//删
//$x->deleteRecordById(1);

//改
//$arr=array('username'=>'pangmen','sex'=>'男','tel'=>'139999999','address'=>'北京');
//$x->updateRecordById(1,$arr);

//查(一条记录)
//print_r($x->getRecordById(1));

//查(所有记录)
//print_r($x->getList());
下载:x.class.rar

上一篇:PayPal全中文详解
下一篇:PHP初级程序员面试题及答案
  • 网友评论:
  • 查看所有评论
  • 我要发表评论
您的网名:
留言主题:
你要发表的内容:

 

关于本站 | 广告联系 | 版权声明 | 网站地图 | 发布软件 | 帮助中心 | 源码论坛

Copyright © 2005-2007 CodePub.Com  程序支持:木翼  滇ICP备05005971号