xml.class.php ファイルのコード
";
*
* 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>$s$k>rn";
}
$xml.="$this->dbtable>rn";
}
$xml.="$this-> ;dbname> ;";
$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>$s$k>rn");
}
fputs($fp,"$this->dbtable>rn") ;
}
fputs($fp,"$this->dbname>");
}
?> 使用法: レコードを挿入します
コードをコピーします
コードは次のとおりです: