亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > 建站經驗 > 正文

php操作xml類讀取查詢刪除數據(支持三級節點)

2024-04-25 20:36:59
字體:
來源:轉載
供稿:網友

php操作xml類主要是針對xml文件夾一個讀取查詢刪除數據例子,下面一起來看看,目前此類暫只支持三級節點哦。

文件名:xml.class.php

/***

* *

* 文件名: xml.php *

* 作 用: xml類,完善中,暫只支持三級節點 *

* 作 者: loking(biyees) *

* *

* example 讀取數據: *

* $xml = new xml(“dbase.xml”,’table’); *

* $data=$xml->xml_fetch_array(); *

* echo ”<pre style=\”font-size:12px;\”>”; *

* print_r($data); *

* *

******************/

class xml{

var $dbase; //數據庫,要讀取的XML文件

var $dbname; //數據庫名稱,頂層元素,與數據庫文件名稱一致

var $dbtable; //數據表,要取得的節點

var $parser; //剖析器

var $vals; //屬性

var $index; //索引

var $dbtable_array;//節點數組

var $array; //下級節點的數組

var $result; //返回的結果

var $querys;

function xml($dbase,$dbtable){

$this->dbase=$dbase;

$this- >dbname=”document”;

$this- >dbtable=$dbtable;

$data=$this- >ReadXml($this->dbase);

if(!$data){

die( ”無法讀取 $this->dbname.xml”);

}

$this- >parser = xml_parser_create();

xml_parser_set_option($this- >parser,XML_OPTION_CASE_FOLDING,0);

xml_parser_set_option($this- >parser,XML_OPTION_SKIP_WHITE,1);

xml_parse_into_struct($this- >parser,$data,$this->vals,$this->index);

xml_parser_free($this- >parser);

//遍歷索引,篩選出要取值的節點 節點名:$dbtable

foreach ($this- >index as $key=>$val) {

if ($key == $this- >dbtable) {

//取得節點數組

$this- >dbtable_array = $val;

} else {

continue;

}

}

for ($i=0; $i < count($this->dbtable_array); $i+=2) {

$offset = $this- >dbtable_array[$i] + 1;

$len = $this- >dbtable_array[$i + 1] - $offset;

//array_slice() 返回根據 offset 和 length 參數所指定的 array 數組中的一段序列。

//所取節點下級數組

$value=array_slice($this- >vals,$offset,$len);

//取得有效數組,合并為結果數組

$this- >array[]=$this->parseEFF($value);

}

return true;

}

//將XML文件讀入并返回字符串

function ReadXml($file)

{

return file_get_contents($file);

}

//取得有效數組

function parseEFF($effective) {

for ($i=0; $i < count($effective); $i++){

$effect[$effective[$i][ "tag"]] = $effective[$i]["value"];

}

return $effect;

}

//xml_query(方法,條件,多條件時邏輯運算符and or or,總數據數組,插入或更新的數組)

function xml_query($method,$condition,$if=’and’,$array=array())

{

if(($method==’select’)||($method==’count’)){

return $this- >xml_select($method,$condition,$if);

} elseif($method==’insert’) {

return $this- >xml_insert($condition,$if,$array);

} elseif($method==’update’) {

return $this- >xml_update($condition,$if,$array);

}

}

//取得xml數組

function xml_fetch_array($condition,$if)

{

//$this- >querys++;

$row = $this- >array; //初始化數據數組

if($condition) {

//是否有條件,如有條件則生成符合條件的數組

//生成條件數組,條件格式 field,operator,match

$condition=explode( ”,”,$condition);//條件數組

$cs=count($condition)/3; //條件數

for($i=0;$i <$cs;$i++){

$conditions[]=array( ”field”=>$condition[$i*3],”operator”=>$condition[$i*3+1],”match”=>$condition[$i*3+2]);

}

//echo count($row);

for($r=0;$r <count($row);$r++){

for($c=0;$c <$cs;$c++){

//$i++;

$condition=$conditions[$c]; //當前條件

$field=$condition['field']; //字段

$operator=$condition[ "operator"];//運算符

$match=$condition['match']; //匹配

if(($operator==’=') &&($row[$r][$field]==$match)){
$true++;//若條件符合,符合數加1

} elseif(($operator==’!=’) &&($row[$r][$field]!=$match)){
$true++;//若條件符合,符合數加1

} elseif(($operator==’ <’)&&($row[$r][$field]<$match)){
$true++;//若條件符合,符合數加1

} elseif(($operator==’ <=’)&&($row[$r][$field]<=$match)){
$true++;//若條件符合,符合數加1

} elseif(($operator==’ >’)&&($row[$r][$field]>$match)){
$true++;//若條件符合,符合數加1

} elseif(($operator==’ >’)&&($row[$r][$field]>=$match)){
$true++;//若條件符合,符合數加1

}

}

//根據條件取值

if($if==’and’){

//如果多條件為and,當符合數等于條件數時,生成數組

if($true==$cs){

$result[]=$row[$r];

}

} else {

//如果多條件為or,當有符合紀錄時,生成數組

if($true!=0){

$result[]=$row[$r];

}

}

//echo $true;

//echo ”<pre style=\”font-size:12px;\text-align:left\”>”;

//print_r($true);

$true=0;//符合條件數歸零,進入下一輪循環

}

} else {

$result=$this- >array;

}

//echo ”<pre style=\”font-size:12px;\text-align:left\”>”;

//print_r($this- >result);

return $result;

}

//篩選或統計

function xml_select($method,$condition,$if)

{

$result=$this- >xml_fetch_array($condition,$if);

if($method==’select’){

return $result;

} else {

return count($result);

}

}

//插入數據

function xml_insert($condition,$if,$array)

{

$data=$this- >xml_fetch_array($condition,$if);//總數據數組

$data[]=$array; //插入后的總數據數組

$this- >array=$data; //更新總數組

$this- >WriteXml($data);

}

//得到更新的XML并改寫

function xml_update($condition,$if,$array){

$datas=$this- >array; //總數據數組

$subtract=$this- >xml_fetch_array($condition,$if);//要更新的數組

//echo ”<pre style=\”font-size:12px;\text-align:left\”>”;

//print_r($data);

//print_r($datas);

//echo ”每條記錄中有“.count($datas[0]).”個值<br>”;

for($i=0;$i <count($datas);$i++){

$data=$datas[$i];

//echo ”原始記錄中的第“.$i.”條<br>”;

foreach($data as $k= >$v){

//echo ”-第“.$i.”條的“.$k.”值為“.$v.”<br>”;

//echo ”–要查找的數組“.$k.”值為“.$subtract[0][$k].”<br>”;

if($v==$subtract[0][$k]){

$is++;

}

}

if($is==count($data)){

//echo ”—-與第“.$i.”條符合<br>”;

$datas[$i]=$array;

//array_splice($datas,$i,$i+1);

}

//echo ”原始記錄中的第“.$i.”條與要查找的有“.$is.”匹配<br>”;

//echo ”原始記錄中的第“.$i.”條結束<br>”;

$is=0;

}

//array_splice($datas,2,2+1,$array);

//echo ”<pre style=\”font-size:12px;\text-align:left\”>”;

//print_r($datas);

$this- >array=$datas;

$this- >WriteXml($datas);

}

//寫入XML文件(全部寫入)

function WriteXml($array)

{

if(!is_writeable($this- >dbase)){

die( ”無法寫入“.$this->dbname.”.xml”);

}

$xml.= ”<?xml version=\”1.0\” encoding=\”gb2312\”?>\r\n”;

$xml.= ”<$this->dbname>\r\n”;

for($i=0;$i <count($array);$i++){

$xml.= ”<$this->dbtable>\r\n”;

foreach($array[$i] as $k= >$s){

$xml.= ”<$k>$s</$k>\r\n”;

}

$xml.= ”</$this->dbtable>\r\n”;

}

$xml.= ”</$this->dbname>”;

dbase,”w’>$fp=@fopen($this->dbase,”w”);

flock($fp, LOCK_EX);

rewind($fp);

fputs($fp,$xml);

fclose($fp);

}

//逐行寫入xml(我試著寫入10000行,感覺沒一次寫入快,所以沒用這種寫入方式)

function WriteLine($array)

{

if(!is_writeable($this- >dbase)){

die( ”無法寫入“.$this->dbname.”.xml”);

}

dbase,”w’>$fp=@fopen($this->dbase,”w”);

rewind($fp);

flock($fp, LOCK_EX);

fputs($fp, ”<?xml version=\”1.0\” encoding=\”gb2312\”?>\r\n”);

fputs($fp, ”<$this->dbname>\r\n”);

for($i=0;$i <count($array);$i++){

fputs($fp, ”<$this->dbtable>\r\n”);

$xml.= ”<$this->dbtable>\r\n”;

foreach($array[$i] as $k= >$s){

fputs($fp, ”<$k>$s</$k>\r\n”);

}

fputs($fp, ”</$this->dbtable>\r\n”);

}

fputs($fp, ”</$this->dbname>”);

fclose($fp);

}

}

?>

使用方法:

插入一條記錄

require_once(‘xml.class.php’);

$xml = new xml(“exemple.xml”,”item”);

$newarray = array(

“title”=>”XML標題“,

“text”=>”PHP的XML類測試!“

);

$insert=$xml->xml_query(‘insert’,”,”,$newarray);//第二及第三個變量位置是條件,留空表示在最后插入

修改記錄

require_once(‘xml.class.php’);

$xml = new xml(“exemple.xml”,”item”);

$array = array(

“title”=>”XML標題“,

“text”=>”PHP的XML類測試!“

);

$insert=$xml->xml_query(‘update’,'title,=,20年后世界將會怎樣?‘,’and’,$array);//title標簽等于xxx的用$array替換(可以建唯一屬性的標簽,比如id,這樣就可以修改某一條記錄)

刪除記錄

require_once(‘xml.class.php’);

$xml = new xml(“exemple.xml”,”item”);

$array = array();

$insert=$xml->xml_query(‘update’,'title,=,20年后世界將會怎樣?‘,’and’,$array);//數組留空

備注

刪除時其實是把值變空,我們可以修改一下xml_update(),在生成xml文件之前先判斷$array的值,如果值為空就不寫入到最終的數組中就是刪除的效果了。

寫入xml文件時速度粉快(我測試過30000條記錄的情況),插入時只插入一條記錄,修改速度也相當的快,挺適合中型網站生成XML時使用,所以推薦一下。

 

 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩在线视频中文字幕| 欧美一区深夜视频| 精品久久在线播放| 欧美激情视频免费观看| 久久精品2019中文字幕| 国产亚洲精品一区二555| 亚洲人成在线观看网站高清| 91精品视频在线播放| 成人有码在线播放| 精品国产一区二区三区四区在线观看| 成人网在线观看| 亚洲一区中文字幕在线观看| 两个人的视频www国产精品| 日韩在线视频网站| 欧美二区在线播放| 久久精品视频免费播放| 国产精品黄页免费高清在线观看| 亚洲人成毛片在线播放| 美女精品久久久| 国产福利视频一区| 国产成人精品久久久| 午夜精品久久久久久久白皮肤| 国产精品扒开腿做爽爽爽的视频| 欧美日本在线视频中文字字幕| 中文字幕一区二区精品| 欧美激情视频给我| 久久久久五月天| 国产啪精品视频网站| 日韩国产精品亚洲а∨天堂免| 中文字幕国产日韩| 国产日韩中文字幕在线| www.日本久久久久com.| 精品国产乱码久久久久酒店| 一区二区福利视频| 国产一区二区在线播放| 国产欧美日韩91| 亚洲精选一区二区| 高清欧美性猛交xxxx黑人猛交| 亚洲日本成人女熟在线观看| 日韩美女福利视频| 中文字幕日韩在线视频| 国产精品美女久久久久av超清| 中文字幕亚洲欧美日韩2019| 国产精品久久久久久久天堂| 日韩国产在线播放| 亚洲精品自拍视频| 国产精品video| 国产精品亚洲视频在线观看| 久久久久久18| 久久精品国产综合| 97视频免费在线看| 亚洲成人在线视频播放| 日韩在线观看免费| 综合久久五月天| 91久久综合亚洲鲁鲁五月天| 久久综合国产精品台湾中文娱乐网| 成人天堂噜噜噜| 国产精品视频色| 亚洲激情视频在线播放| 日韩暖暖在线视频| 国产成人自拍视频在线观看| 国内精品久久久久久中文字幕| 日韩av在线最新| 国产精品吹潮在线观看| 国产视频亚洲精品| 91九色精品视频| 国产精品无码专区在线观看| 欧美在线视频在线播放完整版免费观看| 欧美日韩中国免费专区在线看| 国产一级揄自揄精品视频| 国产精品三级美女白浆呻吟| 亚洲天堂av电影| 欧美日韩成人在线视频| 亚洲一区二区三区xxx视频| 欧美成人全部免费| 国产精品久久久久77777| 国产福利成人在线| 成人午夜小视频| 亚洲国产精品久久91精品| 国产精品免费视频xxxx| 久久久精品视频在线观看| 91成人在线播放| 国产精品最新在线观看| 国产剧情久久久久久| 国产精国产精品| 91国内在线视频| www.色综合| 久久精品99久久香蕉国产色戒| 欧美亚洲免费电影| 一区二区国产精品视频| 国产伦精品一区二区三区精品视频| 亚洲女人初尝黑人巨大| 高清日韩电视剧大全免费播放在线观看| 欧美亚洲另类激情另类| www.亚洲男人天堂| 在线丨暗呦小u女国产精品| 亚洲天堂网站在线观看视频| 永久免费看mv网站入口亚洲| 日韩亚洲国产中文字幕| 国产精欧美一区二区三区| 日韩电影免费在线观看中文字幕| 日韩在线视频免费观看| 精品国产一区久久久| 在线观看精品自拍私拍| 欧洲日本亚洲国产区| 亚洲最大福利视频| 岛国视频午夜一区免费在线观看| www.日本久久久久com.| 色综合视频网站| 色播久久人人爽人人爽人人片视av| 91精品国产综合久久香蕉最新版| 国内精品小视频| 久久久黄色av| 国产日韩欧美中文| 亚洲精品二三区| 亚洲欧美变态国产另类| 国产福利精品视频| 国产午夜精品美女视频明星a级| 午夜精品蜜臀一区二区三区免费| 亚洲成人久久电影| 日韩中文在线观看| 欧美黑人xxx| 国产精品久久久久久久久久| 亚洲国产又黄又爽女人高潮的| 欧美激情第一页xxx| 欧美野外猛男的大粗鳮| 伊人久久久久久久久久久| 91精品国产91久久久久久| 欧美日韩第一视频| 日韩av片电影专区| 麻豆成人在线看| 九九精品在线播放| 日韩精品在线观看视频| 最好看的2019年中文视频| 中文字幕视频一区二区在线有码| 日韩欧美高清视频| 亚洲亚裔videos黑人hd| 欧美黑人性视频| 国产亚洲精品日韩| 日韩在线视频线视频免费网站| 欧美激情啊啊啊| 国内精品久久久久久影视8| 亚洲大尺度美女在线| 欧洲中文字幕国产精品| 美日韩在线视频| 色综合久久88色综合天天看泰| 成人免费大片黄在线播放| 国产日韩精品电影| 午夜伦理精品一区| 国产精品嫩草影院一区二区| 性欧美亚洲xxxx乳在线观看| 日本欧美爱爱爱| 亚洲а∨天堂久久精品9966| 欧美裸体xxxx极品少妇| 欧美日韩激情网| 久久国产精品首页| 57pao成人永久免费视频| 2018国产精品视频| 性欧美视频videos6一9| 久久视频这里只有精品| 97久久伊人激情网| 成人精品一区二区三区电影黑人| 久国内精品在线| 97香蕉超级碰碰久久免费软件|