xml.class.php ファイルのコード
コードをコピーします コードは次のとおりです:
* データを読み取る例:
*
* $xml = new xml("dbase.xml",'table')
*
* $data=$xml->xml_fetch_array();
*
* echo "
";
*
* print_r($data);
*
class xml
{ // 読み込むデータベース、XML ファイル
var $dbname;データベース名、最上位要素、データベース ファイル名と一致します
var $dbtable //データ テーブル、取得するノード
var $parser; //Attributes
var $index;インデックス
var $dbtable_array; // ノードの配列
var $result; // 返される結果
function xml($dbase,$dbtable)
$ this ->dbase=$dbase;
$this->dbname=substr($dbase,strrpos($dbase,"/")+1,-4);
$this->dbtable=$dbtable; data=$this->ReadXml($this->dbase);
if(!$data){
die("$this->dbname.xml を読み取れません"); 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 {
続ける;
}
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 パラメーターで指定された配列内のシーケンスを返します。
//ノードの下位レベルの配列を取得します
$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 (メソッド、条件、論理演算子、および複数の条件の場合は 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 配列を取得する
関数 xml_fetch_array ($condition,$ if)
{
//$this->querys++;
$row = $this->array; //データ配列を初期化します
if($condition) {
//条件がある場合は、一致する条件付き配列を生成します
//条件付き配列、条件付き書式フィールド、演算子、一致を生成します
$c//条件付き配列
$cs=count($condition)/3; //条件付き数値
for( $i=0;$i<$cs;$i++){
$conditions[]=array("フィールド"=>$condition[$i*3],"演算子"=>$condition[$i* 3+1],"match "=>$condition[$i*3+2]);
}
//echo count($row)
for($r=0;$rfor($c=0;$c<$cs;$c++){
//$i++;
$c //現在の状態
$field=$condition['field']; /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 {
//条件が複数ある場合、一致するレコードがある場合、配列
if ($true!= 0){
$result[]=$row[$r];
}
}
//echo $true;
//print_r($true ; ;
// print_r($this->result);
return $result;
}
//フィルタリングまたは統計
function xml_select($method,$condition,$if)
{
$result=$this-> ;xml_fetch_array($)条件,$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; //合計データ array
$subtract=$this->xml_fetch_array($condition,$if);//更新する配列
// echo "< ;pre>";
//print_r($data);
//print_r($datas);
//echo "各レコードには ".count($datas[0]) の値があります。";
for($i=0;$i$data=$datas[$i];
//echo "$i の No.1" item
";
foreach($data as $k=>$v){
//echo "-".$i." 項目の ".$k." 値は ".$v."
";
//echo "--検索される配列 ".$k." の値は ".$subtract[0][$k]."
";
if( $v==$subtract[0][$k]){
$is++;
}
}
if($is==count($data)){
//echo "----最初の " .$i." と一致します
";
$datas[$i]=$array;
}
//echo "元の ".レコード内の $i." 項目は、見つかった ".$is." と一致します
";
//echo "元のレコードの ".$i." 項目は終了します
}
//array_splice($datas,2,2+1,$array);
//print_r($datas); $datas;
$this->WriteXml($datas);
//XML ファイルの書き込み (すべて書き込み)
function WriteXml($array)
{
if(!is_writeable($this->dbase)){
die("書き込みできません".$this->dbname. ".xml");
}
$xml.="rn"; ;rn";
for($i=0;$i$xml.="<$this->dbtable>rn";
foreach($array [$ i] as $k=>$s){
$xml.="<$k>$s$k>rn"
}
$xml.="$this-> ;dbtable> ;rn";
}
$xml.="$this->dbname>";
$fp=@fopen($this->dbase,"w");
flock($fp , LOCK_EX );
rewind($fp);
fputs($fp,$xml);
}
//xml を 1 行ずつ書き込もうとしましたが、できませんでした一度書き込みが速いのでこの書き込み方法を使う必要はありません)
function WriteLine($array)
{
if(!is_writeable($this->dbase)){
die("書き込みできません".$ this->dbname.".xml");
$fp=@fopen($this->dbase,"w");
flock($fp,
); fputs($ fp,"rn");
fputs($fp,"<$this->dbname>rn"); for($ i=0;$ifputs($fp,"<$this->dbtable>rn");
$xml.="<$this ->dbtable>rn";
foreach($array[$i] as $k=>$s){
fputs($fp,"<$k>$s$k>rn");
}
fputs($fp,"$this->dbtable>rn");
}
fputs($fp,"$this->dbname>"); );
}
}
?>
使用法: レコードを挿入します
コードは次のとおりです:
require_once('xml.class.php'); new xml("example .xml","item");$newarray = array( "title"=>"XML タイトル", "text"=>"PHP の XML クラスのテスト! " ); $insert=$xml->xml_query('insert','','',$newarray);//2 番目と 3 番目の変数位置は条件であり、空白のままにすると最後に
が挿入されます。
レコードを変更します
コードをコピーします
コードは次のとおりです:
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);//xxx に等しいタイトル タグを $array に置き換えます (id などの固有の属性タグを作成できます)
レコードを削除
require_once('xml.class.php');
コードをコピー
コードは次のとおりです:
$xml = new xml("example .xml","item");
$ array = array();$insert=$xml->xml_query('update','title,=,20年後の世界はどうなっているでしょうか?',' and',$array);// 配列を空のままにしておきます 備考: 削除するとき、値は実際には空になります。xml ファイルを生成する前に、xml_update() を変更して $array の値を決定できます。が空の場合、最終的な配列には書き込まれません。これは、削除の効果です。挿入時には、1 つのレコードのみが挿入され、変更が行われます。速度も非常に速いので、中規模の Web サイトが XML を生成する場合に使用するのに非常に適しています。 以上、xinputemulator の内容も含めて、XML をデータベースとして操作する PHP クラスを紹介しました。PHP チュートリアルに興味のある友人の参考になれば幸いです。