"; <br>* <br>* print_r($data); <br>* <br>class xml <br>{ // 読み込むデータベース、XML ファイル <br>var $dbname;データベース名、最上位要素、データベース ファイル名と一致します<br>var $dbtable //データ テーブル、取得するノード<br>var $parser; //Attributes<br>var $index;インデックス <br>var $dbtable_array; // ノードの配列 <br>var $result; // 返される結果 <br>function xml($dbase,$dbtable) <br>$ this ->dbase=$dbase; <br>$this->dbname=substr($dbase,strrpos($dbase,"
/
")+1,-4); <br>$this->dbtable=$dbtable; data=$this->ReadXml($this->dbase); <br>if(!$data){ <br>die("
$this
->dbname.xml を読み取れません
"); parser,$data ,$this->vals,$this->index); <br>xml_parser_free($this->parser); <br>//インデックスを走査し、評価されるノードのノード名を除外します。 $dbtable <br>foreach ($this ->index as $key=>$val) { <br>if ($key == $this->dbtable) { <br>//ノード配列を取得します<br>$this->dbtable_array = $val; <br>} else { <br>続ける; <br>} <br>for ($i=0; $i < count($this->dbtable_array); $i+=2) { <br>$offset = $this- >dbtable_array[$i] + 1; <br>$len = $this->dbtable_array[$i + 1] - $offset; <br>//array_slice() は、offset パラメーターと length パラメーターで指定された配列内のシーケンスを返します。<br>//ノードの下位レベルの配列を取得します<br>$value=array_slice($this->vals,$offset,$len); <br>//有効な配列を取得し、結果の配列にマージします<br>$this- >array[]=$ this->parseEFF($value); <br>} <br>return true; <br>//XML ファイルを読み取り、文字列を返します <br>function ReadXml($file) <br>{ <br>return file_get_contents($) file); <br>} <br> //有効な配列を取得<br>function parseEFF($Effective) { <br>for ($i=0; $i < count($Effective); $i++){ <br>$effect[$Effective[$ i]["
tag
"] ] = $Effective[$i]["
value
"]; <br>} <br>return $effect; <br>//xml_query (メソッド、条件、論理演算子、および複数の条件の場合は or を挿入)または更新されました) <br>function xml_query($method,$condition,$if='and',$array=array()) <br>{ <br>if(($method=='select')||($method=='count ')){ <br> return $this->xml_select($method,$condition,$if); <br>} elseif($method=='insert') { <br> return $this->xml_insert($condition,$if) ,$array); <br>} elseif($method=='update') { <br>return $this->xml_update($condition,$if,$array) <br>} <br>} <br>//xml 配列を取得する<br>関数 xml_fetch_array ($condition,$ if) <br>{ <br>//$this->querys++; <br>$row = $this->array; //データ配列を初期化します <br>if($condition) { <br>//条件がある場合は、一致する条件付き配列を生成します<br>//条件付き配列、条件付き書式フィールド、演算子、一致を生成します<br>$c//条件付き配列<br>$cs=count($condition)/3; //条件付き数値<br>for( $i=0;$i<$cs;$i++){ <br>$conditions[]=array("
フィールド
"=>$condition[$i*3],"
演算子
"=>$condition[$i* 3+1],"
match
"=>$condition[$i*3+2]); <br>} <br>//echo count($row) <br>for($r=0;$r<count> for($c=0;$c<$cs;$c++){ <br>//$i++; <br>$c //現在の状態<br>$field=$condition['field']; /Field<br>$operator=$condition["
operator
"]; //演算子 <br>$match=$condition['match']; //一致 <br>if(($operator=='=')&&($row[$] r][$field] ==$match)){ <br>$true++;//条件が満たされる場合、一致の数は 1 つ増加します <br>} elseif(($operator=='!=')&&($ row[$r][$field]!=$ match)){ <br>$true++;//条件が満たされる場合、一致の数は 1 つ増加します <br>} elseif(($operator=='<') &&($row[$r][$field]<$match)) { <br>$true++;//条件が満たされる場合、一致の数は 1 つ増加します <br>} elseif(($operator=='< ;=')&&($row[$r][$field]<=$match)){ <br>$true++;//条件が満たされる場合、一致する数値に 1 を加算します <br>} elseif(($operator= ='>')&&($row[$r][$field]>$match)){ <br>$true++ ;//条件が満たされる場合、一致する数値に 1 を加算します <br>} elseif(($operator =='>')&&($row[$r][$field]>=$match)){ <br>$true++;/ /条件が満たされた場合、一致する数値に 1 を加えます <br>} <br>} <br> //条件に応じた値を取得 <br>if($if=='and'){ <br>//複数の条件がandの場合、一致する数が条件の数と等しい場合に配列を生成 <br>if($true= =$cs){ <br>$result[]=$row[$r]; <br>} <br>} else { <br>//条件が複数ある場合、一致するレコードがある場合、配列 <br>if ($true!= 0){ <br>$result[]=$row[$r]; <br>} <br>} <br>//echo $true; <br>//print_r($true ; ; <br>// print_r($this->result); <br>return $result; <br>} <br>//フィルタリングまたは統計 <br>function xml_select($method,$condition,$if) <br>{ <br>$result=$this-> ;xml_fetch_array($)条件,$if); <br>if($method=='select'){ <br>return $result; <br>} else { <br>return count($result) <br>} <br>} <br>//データを挿入 <br>function xml_insert($condition) ,$if,$array) <br>{ <br>$data=$this->xml_fetch_array($condition,$if);// 合計データ配列 <br>$data[]=$array; // 挿入後の合計データ配列 <br>$ this->array=$data; // 配列全体を更新します<br>$this->WriteXml($data); <br>//更新された XML を取得して書き換えます<br>function xml_update($condition,$ if,$ array) <br>{ <br>$datas=$this->array; //合計データ array<br>$subtract=$this->xml_fetch_array($condition,$if);//更新する配列<br>// echo "
< ;pre>
"; <br>//print_r($data); <br>//print_r($datas); <br>//echo "
各レコードには
".count($datas[0]) の値があります。"
; <br>
for
(
$i
=0;
$i
<
count
>
$data
=
$datas
[
$i
]; <br>//
echo
"$i の No.1"
item<br>
"; <br>foreach($data as $k=>$v){ <br>//echo "
-
".$i."
項目の
".$k."
値は
".$v."
<br>
"; <br>//echo "
--検索される配列
".$k."
の値は
".$subtract[0][$k]."
<br>
"; <br> if( $v==$subtract[0][$k]){ <br>$is++; <br>} <br>} <br>if($is==count($data)){ <br>//echo "
----最初の
" .$i."
と一致します<br>
"; <br>$datas[$i]=$array; <br>} <br>//echo "
元の
".レコード内の $i."
項目は、見つかった
".$is."
と一致します<br>
"; <br>//echo "
元のレコードの
".$i."
項目は終了します<br> ;
";="
" 0;="
" <br="
">} <br>//array_splice($datas,2,2+1,$array); <br>//print_r($datas); $datas; <br>$this->WriteXml($datas);<br>//XML ファイルの書き込み (すべて書き込み) <br>function WriteXml($array) <br>{ <br>if(!is_writeable($this->dbase)){ <br>die("
書き込みできません
".$this->dbname. "
.xml
"); <br>} <br>$xml.="
<!--?xml version=
"1.0"
encoding=
"utf-8"
?-->rn
"; ;rn"
; <br>
for
(
$i
=0;
$i
<
count
>
$xml
.=
"<$this->dbtable>rn"
; <br>
foreach
(
$array
[$ i]
as
$k
=>
$s
){ <br>
$xml
.=
"<$k>$s<!--$k-->rn"
<br>} <br>
$xml
.=
"<!--$this-> ;dbtable> ;rn"
; <BR-->} <br>
$xml
.=
"<!--$this--->dbname>"
; <br>
$fp
=@
fopen
(
$this
->dbase,
"w"
); <br>
flock
(
$fp
, LOCK_EX ); <br>
rewind
(
$fp
); <br>
fputs
(
$fp
,
$xml
); <br>} <br>//xml を 1 行ずつ書き込もうとしましたが、できませんでした一度書き込みが速いのでこの書き込み方法を使う必要はありません) <br>
function
WriteLine(
$array
) <br>{ <br>
if
(!
is_writeable
(
$this
->dbase)){ <br>
die
(
"書き込みできません"
.$ this->dbname.
".xml"
); <br>
$fp
=@
fopen
(
$this
->dbase,
"w"
); <br>
flock
(
$fp
, <br>);
fputs
($ fp,
"<!--?xml version="
1.0
" encoding="
utf-8
"?-->rn"
); <br>
fputs
(
$fp
,
"<$this->dbname>rn"
);
for
($ i=0;
$i
<
count
>
fputs
(
$fp
,
"<$this->dbtable>rn"
); <br>
$xml
.=
"<$this ->dbtable>rn"
; <br>
foreach
(
$array
[
$i
]
as
$k
=>
$s
){ <br>
fputs
(
$fp
,
"<$k>$s<!--$k-->rn"
); <br>} <br>
fputs
(
$fp
,
"<!--$this--->dbtable>rn"
); <br>} <br>
fputs
(
$fp
,
"<!--$this--->dbname>"
); ); <br> } <br>} <br>?> <br><br><br> 使用法: レコードを挿入します <br><br><br><br> コードは次のとおりです: </
count
></
count
></br>></
count
></
count
><p></p>
<br><br>
require_once
(
'xml.class.php'
);
new
xml(
"example .xml"
,
"item"
); <p>
$newarray
=
array
( <span>
"title"
=>
"XML タイトル"
, <u>
"text"
=>
"PHP の XML クラスのテスト! "
</u>); </span>
$insert
=
$xml
->xml_query(
'insert'
,
''
,
''
,
$newarray
);
<p> が挿入されます。 <br>レコードを変更します<br><br><br><br>コードをコピーします<br><br> コードは次のとおりです:<br></p>
<br>
require_once
(
'xml.class.php'
) <br>
$xml
=
new
xml(
"exemple.xml"
,
"item"
);
$array
=
array
( <p>
"title"
=>
"XML タイトル"
, <span>
"text"
=>
"PHP の XML クラス テスト!"
<u>); </u>
$insert
=
$xml
->xml_query(
'update'
,
' title, =, 20 年後の世界はどうなるでしょうか? '
,
'and'
,
$array
);
<p>レコードを削除<br><br><br><br>コードをコピー<br><br> コードは次のとおりです:<br><br></p>
require_once
(
'xml.class.php'
); <br>
$xml
=
new
xml(
"example .xml"
,
"item"
); <br>$
array
=
array
(); <p>
$insert
=
$xml
->xml_query(
'update'
,
'title,=,20年後の世界はどうなっているでしょうか?'
,
' and'
,
$array
);
</span>
以上、xinputemulator の内容も含めて、XML をデータベースとして操作する PHP クラスを紹介しました。PHP チュートリアルに興味のある友人の参考になれば幸いです。 </p>
<p>
<br></p>