国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

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

2024-05-04 21:49:41
字體:
來源:轉載
供稿:網友

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

文件名,xml.class.php,代碼如下:

  1. <?php 
  2. /***  
  3. * * 
  4. * 文件名: xml.php * 
  5. * 作 用: xml類,完善中,暫只支持三級節點 * 
  6. * 作 者: loking(biyees) * 
  7. * * 
  8. * example 讀取數據: *  
  9. * $xml = new xml(“dbase.xml”,’table’); *  
  10. * $data=$xml->xml_fetch_array(); * 
  11. * echo ”<pre style=\”font-size:12px;\”>”; * 
  12. * print_r($data); *  
  13. * * 
  14. ******************/ 
  15. class xml{ 
  16. var $dbase//數據庫,要讀取的XML文件  
  17. var $dbname//數據庫名稱,頂層元素,與數據庫文件名稱一致  
  18. var $dbtable//數據表,要取得的節點  
  19. var $parser//剖析器  
  20. var $vals//屬性  
  21. var $index//索引  
  22. var $dbtable_array;//節點數組  
  23. var $array//下級節點的數組  
  24. var $result//返回的結果  
  25. var $querys
  26.  
  27. function xml($dbase,$dbtable){ 
  28. $this->dbase=$dbase
  29. $this- >dbname=”document”; 
  30. $this- >dbtable=$dbtable
  31. $data=$this- >ReadXml($this->dbase); 
  32. if(!$data){  
  33. die( ”無法讀取 $this->dbname.xml”); 
  34. }  
  35. $this- >parser = xml_parser_create(); 
  36. xml_parser_set_option($this- >parser,XML_OPTION_CASE_FOLDING,0); 
  37. xml_parser_set_option($this- >parser,XML_OPTION_SKIP_WHITE,1); 
  38. xml_parse_into_struct($this- >parser,$data,$this->vals,$this->index);  
  39. xml_parser_free($this- >parser); 
  40. //遍歷索引,篩選出要取值的節點 節點名:$dbtable  
  41. foreach ($this- >index as $key=>$val) { 
  42. if ($key == $this- >dbtable) { 
  43. //取得節點數組  
  44. $this- >dbtable_array = $val;  
  45. else {  
  46. continue;  
  47. }  
  48. }  
  49. for ($i=0; $i < count($this->dbtable_array); $i+=2) { 
  50. $offset = $this- >dbtable_array[$i] + 1;  
  51. $len = $this- >dbtable_array[$i + 1] - $offset
  52. //array_slice() 返回根據 offset 和 length 參數所指定的 array 數組中的一段序列。  
  53. //所取節點下級數組  
  54. $value=array_slice($this- >vals,$offset,$len); 
  55. //取得有效數組,合并為結果數組  
  56. $this- >array[]=$this->parseEFF($value); 
  57. }  
  58. return true;  
  59. }  
  60. //將XML文件讀入并返回字符串  
  61. function ReadXml($file)  
  62. {  
  63. return file_get_contents($file);  
  64. }  
  65. //取得有效數組  
  66. function parseEFF($effective) {  
  67. for ($i=0; $i < count($effective); $i++){ 
  68. $effect[$effective[$i][ "tag"]] = $effective[$i]["value"]; 
  69. }  //開源軟件:Vevb.com 
  70. return $effect;  
  71. }  
  72. //xml_query(方法,條件,多條件時邏輯運算符and or or,總數據數組,插入或更新的數組)  
  73. function xml_query($method,$condition,$if=’and’,$array=array())  
  74. {  
  75. if(($method==’select’)||($method==’count’)){  
  76. return $this- >xml_select($method,$condition,$if); 
  77. elseif($method==’insert’) {  
  78. return $this- >xml_insert($condition,$if,$array); 
  79. elseif($method==’update’) {  
  80. return $this- >xml_update($condition,$if,$array); 
  81. }  
  82. }  
  83. //取得xml數組  
  84. function xml_fetch_array($condition,$if)  
  85. {  
  86. //$this- >querys++; 
  87. $row = $this- >array//初始化數據數組 
  88. if($condition) {  
  89. //是否有條件,如有條件則生成符合條件的數組  
  90. //生成條件數組,條件格式 field,operator,match  
  91. $condition=explode( ”,”,$condition);//條件數組 
  92. $cs=count($condition)/3; //條件數  
  93. for($i=0;$i <$cs;$i++){ 
  94. $conditions[]=array( ”field”=>$condition[$i*3],”operator”=>$condition[$i*3+1],”match”=>$condition[$i*3+2]); 
  95. }  
  96. //echo count($row);  
  97. for($r=0;$r <count($row);$r++){ 
  98. for($c=0;$c <$cs;$c++){ 
  99. //$i++;  
  100. $condition=$conditions[$c]; //當前條件  
  101. $field=$condition['field']; //字段  
  102. $operator=$condition"operator"];//運算符 
  103. $match=$condition['match']; //匹配  
  104. if(($operator==’=') &&($row[$r][$field]==$match)){ 
  105. $true++;//若條件符合,符合數加1  
  106. elseif(($operator==’!=’) &&($row[$r][$field]!=$match)){ 
  107. $true++;//若條件符合,符合數加1  
  108. elseif(($operator==’ <’)&&($row[$r][$field]<$match)){ 
  109. $true++;//若條件符合,符合數加1  
  110. elseif(($operator==’ <=’)&&($row[$r][$field]<=$match)){ 
  111. $true++;//若條件符合,符合數加1  
  112. elseif(($operator==’ >’)&&($row[$r][$field]>$match)){ 
  113. $true++;//若條件符合,符合數加1  
  114. elseif(($operator==’ >’)&&($row[$r][$field]>=$match)){ 
  115. $true++;//若條件符合,符合數加1  
  116. }  
  117. }  
  118. //根據條件取值  
  119. if($if==’and’){  
  120. //如果多條件為and,當符合數等于條件數時,生成數組  
  121. if($true==$cs){  
  122. $result[]=$row[$r];  
  123. }  
  124. else {  
  125. //如果多條件為or,當有符合紀錄時,生成數組  
  126. if($true!=0){  
  127. $result[]=$row[$r];  
  128. }  
  129. }  
  130. //echo $true;  
  131. //echo ”<pre style=\”font-size:12px;\text-align:left\”>”; 
  132. //print_r($true);  
  133. $true=0;//符合條件數歸零,進入下一輪循環  
  134. }  
  135. else {  
  136. $result=$this- >array
  137. }  
  138. //echo ”<pre style=\”font-size:12px;\text-align:left\”>”; 
  139. //print_r($this- >result); 
  140. return $result;  
  141. }  
  142. //篩選或統計  
  143. function xml_select($method,$condition,$if)  
  144. {  
  145. $result=$this- >xml_fetch_array($condition,$if); 
  146. if($method==’select’){  
  147. return $result;  
  148. else {  
  149. return count($result);  
  150. }  
  151. //插入數據  
  152. function xml_insert($condition,$if,$array)  
  153. {  
  154. $data=$this- >xml_fetch_array($condition,$if);//總數據數組 
  155. $data[]=$array//插入后的總數據數組  
  156. $this- >array=$data//更新總數組 
  157. $this- >WriteXml($data); 
  158. }  
  159. //得到更新的XML并改寫  
  160. function xml_update($condition,$if,$array){  
  161. $datas=$this- >array//總數據數組 
  162. $subtract=$this- >xml_fetch_array($condition,$if);//要更新的數組 
  163. //echo ”<pre style=\”font-size:12px;\text-align:left\”>”; 
  164. //print_r($data);  
  165. //print_r($datas);  
  166. //echo ”每條記錄中有“.count($datas[0]).”個值<br>”; 
  167. for($i=0;$i <count($datas);$i++){ 
  168. $data=$datas[$i];  
  169. //echo ”原始記錄中的第“.$i.”條<br>”; 
  170. foreach($data as $k= >$v){ 
  171. //echo ”-第“.$i.”條的“.$k.”值為“.$v.”<br>”; 
  172. //echo ”–要查找的數組“.$k.”值為“.$subtract[0][$k].”<br>”; 
  173. if($v==$subtract[0][$k]){  
  174. $is++;  
  175. }  
  176. }  
  177. if($is==count($data)){  
  178. //echo ”—-與第“.$i.”條符合<br>”; 
  179. $datas[$i]=$array;  
  180. //array_splice($datas,$i,$i+1);  
  181. }  
  182. //echo ”原始記錄中的第“.$i.”條與要查找的有“.$is.”匹配<br>”;  
  183. //echo ”原始記錄中的第“.$i.”條結束<br>”; 
  184. $is=0;  
  185. }  
  186. //array_splice($datas,2,2+1,$array);  
  187. //echo ”<pre style=\”font-size:12px;\text-align:left\”>”; 
  188. //print_r($datas);  
  189. $this- >array=$datas
  190. $this- >WriteXml($datas); 
  191.  
  192. }  
  193. //寫入XML文件(全部寫入)  
  194. function WriteXml($array)  
  195. {  
  196. if(!is_writeable($this- >dbase)){ 
  197. die( ”無法寫入“.$this->dbname.”.xml”); 
  198. }  
  199. $xml.= ”<?xml version=\”1.0\” encoding=\”gb2312\”?>\r\n”; 
  200. $xml.= ”<$this->dbname>\r\n”; 
  201. for($i=0;$i <count($array);$i++){ 
  202. $xml.= ”<$this->dbtable>\r\n”; 
  203. foreach($array[$ias $k= >$s){ 
  204. $xml.= ”<$k>$s</$k>\r\n”; 
  205. }  
  206. $xml.= ”</$this->dbtable>\r\n”; 
  207. }  
  208. $xml.= ”</$this->dbname>”; 
  209. dbase,”w’>$fp=@fopen($this->dbase,”w”); 
  210. flock($fp, LOCK_EX);  
  211. rewind($fp);  
  212. fputs($fp,$xml);  
  213. fclose($fp);  
  214. }  
  215. //逐行寫入xml(我試著寫入10000行,感覺沒一次寫入快,所以沒用這種寫入方式)  
  216. function WriteLine($array)  
  217. {  
  218. if(!is_writeable($this- >dbase)){ 
  219. die( ”無法寫入“.$this->dbname.”.xml”); 
  220. }  
  221. dbase,”w’>$fp=@fopen($this->dbase,”w”); 
  222. rewind($fp);  
  223. flock($fp, LOCK_EX);  
  224. fputs($fp, ”<?xml version=\”1.0\” encoding=\”gb2312\”?>\r\n”); 
  225. fputs($fp, ”<$this->dbname>\r\n”); 
  226. for($i=0;$i <count($array);$i++){ 
  227. fputs($fp, ”<$this->dbtable>\r\n”); 
  228. $xml.= ”<$this->dbtable>\r\n”; 
  229. foreach($array[$ias $k= >$s){ 
  230. fputs($fp, ”<$k>$s</$k>\r\n”); 
  231. }  
  232. fputs($fp, ”</$this->dbtable>\r\n”); 
  233. }  
  234. fputs($fp, ”</$this->dbname>”); 
  235. fclose($fp);  
  236. }  
  237. ?> 

使用方法:插入一條記錄,代碼如下:

  1. require_once(‘xml.class.php’); 
  2. $xml = new xml(“exemple.xml”,”item”); 
  3. $newarray = array
  4. “title”=>”XML標題“, 
  5. “text”=>”PHP的XML類測試!“ 
  6. ); 
  7. $insert=$xml->xml_query(‘insert’,”,”,$newarray);//第二及第三個變量位置是條件,留空表示在最后插入 
  8. 修改記錄 
  9. require_once(‘xml.class.php’); 
  10. $xml = new xml(“exemple.xml”,”item”); 
  11. $array = array
  12. “title”=>”XML標題“, 
  13. “text”=>”PHP的XML類測試!“ 
  14. ); 
  15. $insert=$xml->xml_query(‘update’,'title,=,20年后世界將會怎樣?‘,’and’,$array);//title標簽等于xxx的用$array替換(可以建唯一屬性的標簽,比如id,這樣就可以修改某一條記錄) 

刪除記錄,代碼如下:

  1. require_once(‘xml.class.php’); 
  2. $xml = new xml(“exemple.xml”,”item”); 
  3. $array = array(); 
  4. $insert=$xml->xml_query(‘update’,'title,=,20年后世界將會怎樣?‘,’and’,$array);//數組留空 

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 常熟市| 荃湾区| 永泰县| 湄潭县| 桂东县| 凤山县| 通山县| 丁青县| 舟曲县| 永泰县| 漠河县| 新蔡县| 宁德市| 神木县| 颍上县| 潜山县| 英超| 高要市| 宁波市| 九台市| 平安县| 靖边县| 定安县| 武穴市| 巴里| 太康县| 会同县| 磴口县| 瓮安县| 忻城县| 丰原市| 麻栗坡县| 灌云县| 寿宁县| 邳州市| 宁南县| 延安市| 天峨县| 龙口市| 独山县| 三江|