<?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;
}
/*
*函数名:insertM
*说明:插入多条记录,参数类型必须是二维数组
*/
public function insertM($arr)
{
$content=$this->getFileContent();
preg_match_all('|<key>(/d+?)<//key>|',$content,$matches);
rsort($matches[1]);
$newkey=$matches[1][0]+1;
$record='';
for($i=0;$i<count .>" {>enter;
$record.='<key>'.$newkey.'</key>'.$this->enter;
foreach($arr[$i] as $k=>$v)
{
$record.="<$k>$v$K>".$this->enter;
}
$record.=''.$this->enter.$this->enter;
$newkey++;
}
$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 getrecordbyid function public exit echo if false : true rsort break>/s*<key>(/d+)/key>/s*[/s/S]*/s*/record>$/">getFileContent();
preg_match('/<record>(/s*<key>'.$id.'<//key>.+?)<//record>/s',$content,$matches);
preg_match_all('|(<.+)|',$matches[1],$arr);
$arrstr='';
for($i=0;$i<count preg_match>(.+)<//(.+)>/',$arr[1][$i],$farr);
$arrstr.="'$farr[2]'=>'$farr[1]'";
if($i<count function public updaterecordbyid return eval>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 . preg_match_all>)|',$matches[1][$i],$tmparr);
$arrstr='';
for($j=0;$j<count preg_match>(.+)<//(.+)>/',$tmparr[1][$j],$farr);
$arrstr.="'$farr[2]'=>'$farr[1]'";
if($j<count function return getfilecontent private eval>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);
}
}
?><pre></pre></count></count></count></record></key></record></key></count></count></key></record></key></count></record></count></key></key>
使用例子
<?php 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()); ?>
本文介绍了一个使用PHP编写的类,该类提供了基本的增删改查功能来操作XML文件。通过简单的函数调用即可实现记录的插入、删除、更新及查询。

1517

被折叠的 条评论
为什么被折叠?



