ホームページ > バックエンド開発 > PHPチュートリアル > PHP は XML をデータベースとして操作します クラス_PHP チュートリアル

PHP は XML をデータベースとして操作します クラス_PHP チュートリアル

WBOY
リリース: 2016-07-21 15:32:46
オリジナル
722 人が閲覧しました

xml.class.php ファイルのコード

コードをコピーします コードは次のとおりです:

* 読み取りデータの例:
*
* $xml = new xml("dbase.xml",'table')
*
* $data=$xml->xml_fetch_array(); *
* echo "
"; 
*
* print_r($data);
*
class xml
{ //database、読み取りたいXML ファイル
var $dbname; //データベース名、データベースファイル名と一致する $dbtable //データテーブル、取得するノード
var $parser ; // /属性
var $index; // ノード配列
var $array; // 返される結果
var $querys; ,$dbtable)
{
$this->dbase=$dbase;
$this->dbname=substr($dbase,strrpos($dbase,"/")+1,-4); >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_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() は、オフセットおよび長さのパラメーターで指定された配列を返します。のシーケンス。
//ノードの下位レベルの配列を取得します
$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) {
//条件がある場合、一致する条件の配列を生成します
//条件配列、条件付き書式フィールド、演算子、一致を生成します
$condition=explode(",",$condition);//条件配列
$cs=count($条件)/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); $r=0;$rfor($c=0;$c//$i++; c]; //現在の条件
$field=$condition['field']; //フィールド
$operator=$condition["operator"];//Operator
$match=$condition['match']; /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') {
//If the複数の条件があり、一致の数が条件の数と等しい場合、配列が生成されます
if($true==$cs){
$result[]=$row[$r];
}
} else {
//複数の条件が or の場合、一致するレコードがある場合、配列を生成します
if($true!=0){
}
}
//エコー $true ;
//エコー "
 
//print_r($true);//条件を満たす数値はゼロに戻され、次のサイクルに入ります
}
} else {
$result=$this->array
}
//echo "
 "; 
//print_r($this->result);
return $result;
//フィルタリングまたは統計
function xml_select($method,$condition,$if)
{
$result=$this- > 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 "
"; $datas); 
//echo "レコードには ".count($datas[0])." の値があります
"; );$i++){
$data=$datas [$i];
//echo "元のレコードの項目 ".$i."
"; v){
//echo "-Item ".$i." バーの ".$k." 値は ".$v."
";
//echo "--The "; $k." 検索する配列の値は ".$subtract[0][$k]."
";
if($v==$subtract[0][$k]){
$is++;
}
}
if($is==count ($data)){
//echo "----項目 ".$i." と一致します
"; i]=$array;
//array_splice($datas, $i,$i+1);
}
//echo "元のレコードの ".$i." 項目は ".$is." と一致します。見つかります
";
//echo "元のレコードの「.$i.」の終わり
";
$is=0;
}
//array_splice($datas,2,2+1,$array);
//echo "
"; $datas); 
$this->array=$datas;
$this->WriteXml($datas);
//XML ファイルの書き込み (すべて書き込み)
function WriteXml($array)
if (!is_writeable($this->dbase)){
die("書き込めません".$this->dbname.".xml");
}
$xml.="rn";
$xml.="<$this->dbname>rn";
for($i=0;$i$xml.="<$this->dbtable>rn";
foreach($array[$i] as $k=>$s){
$xml.="< ;$ k>$srn";
}
$xml.="dbtable>rn";
}
$xml.="$fp=@fopen($this->dbase,"w");
flock($fp, LOCK_EX);
rewind($fp);
fputs($fp,$xml);
fclose ($fp);
}
//xmlを1行ずつ書きます(10,000行書いてみましたが、一度に書くほど速くなかったので、この書き方は使いませんでした)
function WriteLine($配列)
{
if(!is_writeable($this->dbase)){
die("書き込めません".$this->dbname.".xml")
}
$fp=@fopen($ this->dbase,"w");
flock($fp, LOCK_EX);
fputs($fp," ;rn");
fputs($fp,"dbname>rn");
for($i=0;$ifputs ($ fp,"<$this->dbtable>rn");
$xml.="<$this->dbtable>rn";
foreach($array[$i] as $k=>) ;$ s){
fputs($fp,"<$k>$srn");
}
fputs($fp,"dbtable>rn") ;
}
fputs($fp,"dbname>");
}
?> 使用法: レコードを挿入します


コードをコピーします

コードは次のとおりです:

require_once('xml.class.php');
$xml = new xml("exemple.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("exemple) .xml","item");
$ array = array();
$insert=$xml->xml_query('update','title,=,20年後の世界はどうなっているでしょうか?',' and',$array);// 配列を空のままにしておきます
注: 削除する場合、値は実際には空になります。xml ファイルを生成する前に、xml_update() を変更して $array の値を決定できます。が空の場合、最終的な配列には書き込まれません。これは、xml ファイルの書き込み速度が非常に高速です (挿入時に 1 つのレコードのみが挿入され、変更も行われます)。速度も非常に速いので、中規模の Web サイトで XML を生成するのに非常に適しています。
http://www.bkjia.com/PHPjc/322775.html

www.bkjia.com

tru​​e
http://www.bkjia.com/PHPjc/322775.html
技術記事

xml.class.php ファイルのコードのコピー コードは次のとおりです。 ?php * 読み取りデータの例: * * $xml = new xml("dbase.xml",'table') * * $data=$xml-xml_fetch_array(); ; * * echo "pre style="f..."
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート