[部門] => 配列
(
[0] => SimpleXMLElement オブジェクト
(
[名前] => 本番サポート
[emp忠実な人たち] => SimpleXMLElement オブジェクト
( [従業員] => 配列 (
[0] => SimpleXMLElement オブジェクト
( [シリアル番号] => 100001
[名前] => サイモン
[年齢] => 24
[誕生日] => 1982-11-06
[給与] => 1000.00
)
[1] => 100002
[名前] => エレイン
[年齢] => 24
[誕生日] => 1982-01-01
[給与] => 2000.00
)
)
)
[1] => SimpleXMLElement オブジェクト
(
[名前] => テスト センター
[従業員] => SimpleXMLElement オブジェクト
(
[従業員] => SimpleXMLElement オブジェクト
(
[シリアル番号] => 110001
) [name] =&gt =&gt => )
)
出力結果から分かるように、SimpleXML オブジェクトの構造は XML データの形式と完全に同じです。
simplexml_load_file(string filename)
ここでのファイル名の変更は、XML データ ファイルのファイル名とその場所の経路を保存するために使用されます。以下のコードは、simpleXML オブジェクトを作成するために使用されます。下:
$xml = simplexml_load_file('example.xml'); //SimpleXML オブジェクト
print_r($xml); //XML を出力します
?>
このうち、example.xmlに格納されているデータは上記の$dataと全く同じであり、実行結果も上記と全く同じです。
上記 2 つのメソッドは同じ機能を実装していますが、違いは XML のデータ ソースの違いにあります。 XML データ ソースが PHP スクリプト ファイル内にある場合は、simplexml_load_string を使用して作成する必要があります。 XML データ ソースが別の XML ファイルにある場合は、simplexml_load_file を使用して作成する必要があります。
2.2 SimpleXML オブジェクト内の XML データの読み取り
以前、SimpleXML オブジェクト内のデータを読み取るための print_r 関数の使用を紹介しましたが、返される結果は配列の構造に似ています。明らかに、この表示方法は実際のアプリケーションでは望ましくありません。ここでは、SimpleXML オブジェクト内の XML データを読み取る他のいくつかの方法を紹介します。
1. var_dump 関数は、SimpleXML オブジェクトの詳細情報を表示するために使用できます。その構文は次のとおりです。
void var_dump(object1, object2…)
次のコードは、var_dump 関数を使用して、上記の例のオブジェクトの詳細情報を出力します。
コードをコピーします コードは次のとおりです:
実行結果は以下の通りです。
コードをコピーします コードは次のとおりです:
object(SimpleXMLElement)#1 (1) { ["Depart"]=> array(2) {
[0]=> SimpleXMLElement)# 2 (2) {
["name"]=>
string(18) 「本番サポート」
["employees"]=>
object(SimpleXMLElement)#4 (1) {
["employee "]= >
array(2) {
[0]=>
object(SimpleXMLElement)#5 (6) {
["serial_no"]=>
string(6) “100001″
["name "]= >
string(5) “サイモン”
["age"]=>
string(2) “24″
["birthday"]=>
string(10) “1982-11-06 ''
[ "給与"]=>
文字列(7) "5000.00"
["ボーナス"]=>
文字列(7) "1000.00"
}
[1]=> 6 (6 ) {
["シリアル番号"]=>
文字列(6) "100002"
["名前"]=>
文字列(6) "エレイン"
["年齢"]=> (2) “24″
["birthday"]=>
string(10) “1982-01-01″
["salary"]=>
string(7) “6000.00″
["ボーナス"] =>
文字列(7) "2000.00"
}
}
}
[1]=>
オブジェクト(SimpleXMLElement)#3 (2) {
["名前"]=> ) "テスト センター"
["従業員"]=>
object(SimpleXMLElement)#7 (1) {
["従業員"]=>
object(SimpleXMLElement)#8 (6) {
["serial_no" ]=>
文字列(6) “110001″
["名前"]=>
文字列(5) “ヘレン”
["年齢"]=>
文字列(2) “23”
["誕生日"]= >
string(10) “1983-07-21″
["salary"]=>
string(7) “5000.00″
["bonus"]=>
string(7) “1000.00 ''
} }}}}
以前の print_r による出力結果と比較して、var_dump 関数の出力結果の構造はより厳密になり、オブジェクト内の各属性のデータ型が分析されます。実際のアプリケーションでは、プログラムのデバッグ中のオブジェクト検出に var_dump 関数がよく使用されます。
2. XMLデータ内のタグの読み取り
配列型の変数の操作と同様に、XMLの読み取りも同様の方法で行うことができます。たとえば、上記の XML データの各 "Depart" タグの下にある "name" 属性を読み取る必要がある場合は、次のコード
に示すように、foreach 関数を使用してそれを行うことができます。
コードをコピーします
コードは次のとおりです:
delivery as $a); { echo “$a- >name
”; }
?>
実行結果は以下の通りです。
プロダクションサポート
テストセンター
//XMLファイルを読み取る//XMLデータ内の各パートタグをループします
//名前属性を出力します
角括弧「[]」を使用して、XMLデータで指定されたラベルを直接読み取ることもできます。次のコードは、上記の XML データの最初の「Depart」タグの「name」属性を出力します。
コードをコピー
コードは次のとおりです:
$xml = simplexml_load_file('example.xml') //XML ファイルを読み込みますecho $xml->Depart-> name[0]; //出力ノード
;
実行結果は以下の通りです。
プロダクションサポート
タグの下にあるすべての子タグについて、SimpleXML コンポーネントは読み取り用の子メソッドを提供します。たとえば、上記の XML データの「Depart」タグの場合、その下に「name」と「employees」という 2 つのサブタグがあります。次のコードは、最初の「Depart」タグの下のサブタグの読み取りを実装します。
コードをコピーします コードは次のとおりです:
$xml = simplexml_load_file('example.xml')
foreach ($xml->Depart->children(); as $Depart) //Departタグの下のサブタグを読み取るループ
{
var_dump($Depart) //タグのXMLデータを出力します
}
?>
実行結果は次のとおりです。 。
コードをコピーします コードは次のとおりです:
object(SimpleXMLElement)#3 (1) {
[0]=>string(18) "production support"
}
object(SimpleXMLElement) #5 ( 1) {
["従業員"]=>
array(2) {
[0]=>
object(SimpleXMLElement)#3 (6) {
["serial_no"]=> (6) 「100001″
["名前"]=>
文字列(5) 「サイモン」
["年齢"]=>
文字列(2) 「24″
["誕生日"]=>文字列(10) “1982-11-06”
["給与"]=>
文字列(7) "5000.00"
["ボーナス"]=>
文字列(7) "1000.00"
}
[1 ]=> ;
object(SimpleXMLElement)#6 (6) {
["serial_no"]=>
string(6) “100002″
["name"]=>
string(6) "エレイン"
["年齢 "]=>
文字列(2) "24"
["誕生日"]=>
文字列(10) "1982-01-01"
["給与"]=>
文字列(7) ) "6000.00 ″
["bonus"]=>
string(7) “2000.00″
}
}
}
Childrenメソッドを使用した後、すべてのサブタグが新しいものとして扱われることがわかります。 XMLファイルを扱います。
3. XML データ パスに基づくクエリ
SimpleXML コンポーネントは、XML データ パスに基づくクエリ メソッドを提供します。 XML データ パスは、XML のルートから特定のタグまで渡されるすべてのタグです。このパスでは、スラッシュ「/」を使用してタグ名を区切ります。たとえば、上記の XML データの場合、ルートから開始して部門、部門、従業員、および従業員タグを通過するすべてのタグ「name」の値をクエリする場合、パス
は「/Departs」になります。 /部門/従業員/従業員/名前 ". SimpleXML コンポーネントは xpath メソッドを使用してパスを解析します。その構文形式は次のとおりです。
xpath(string path)
path はパスです。このメソッドは、クエリ対象のすべてのタグ値を含む配列を返します。次のコードは、上記の XML データ内のすべての名前タグをクエリします。
コードをコピーします
コードは次のとおりです: $xml = simplexml_load_file('example.xml') //XML ファイルを読み取ります
$result = $xml->xpath ('/detache/employees/employee/name'); //ノードの定義
var_dump($result); //出力ノード
実行結果は以下の通りです。
コードをコピーします
コードは次のとおりです: array(3) { [0]=> object(SimpleXMLElement)#2 (1) {
[0]=> string(5) "サイモン"
}
[1]=> オブジェクト(SimpleXMLElement)#3 (1) {
[0]=> 文字列(6) "エレイン"
}
[2]=> オブジェクト(SimpleXMLElement)# 4 (1 ) {
[0]=> string(5) "Helen"
}
}
すべての名前タグがクエリされたことがわかります。
2.3 XMLデータの変更
XMLデータの変更は、XMLデータ内のタグを読み取る方法と同様です。つまり、SimpleXML オブジェクト内のタグの値を直接変更します。次のコードは、上記の XML データの最初の「Depart」タグの「name」サブタグの変更を実装します。
コードをコピーします
コードは次のとおりです: $xml = simplexml_load_file('example.xml') //XML を読み取ります
$xml->Depart->name[ 0] = "Human Resource"; // ノードを変更します
?>
変更後は XML ファイルには影響しません。ただし、プログラムでは、変更された値は SimpleXML オブジェクトの読み取りに使用されます。
2.4 XML データの標準化
SimpleXML は、XML データを XML として標準化する方法も提供します。 asXML メソッドは、XML 1.0 標準に従って SimpleXML オブジェクト内のコンテンツを効果的に再配置し、それを文字列データ型として返すことができます。次のコードは、上記の XML データの標準化を実装します。
コードをコピーします
コードは次のとおりです:
$xml = simplexml_load_file('example.xml'); //XML データを読み取る
echo $xml->asXML(); //XML データを標準化する
2.5 XML データstorage
SimpleXML オブジェクト内の XML データを XML ファイルに格納する方法は非常に簡単で、asXML メソッドの戻り結果をファイルに出力します。次のコードは、まず XML ファイル内の部門名を変更し、次に変更された XML データを別の XML ファイルに出力します。
コードをコピーします コードは次のとおりです:
$xml = simplexml_load_file('example.xml') //XMLデータを読み取ります
$newxml = $xml->asXML (); //XML データを標準化します
$fp = fopen("newxml.xml", "w"); //XML データを書き込むファイルを開きます
fwrite($fp, $newxml); //XML データを書き込みますfclose ($fp); // ファイルを閉じます
コードを実行すると、以下に示すように newxml.xml ファイルに XML データが表示されます。
XML ファイルへの変更が出力ファイルに保存されていることがわかります。
3 XML ドキュメントの動的作成
実際のアプリケーションでは、XML ドキュメントを動的に生成する必要がある場合があります。前に紹介した SimpleXML コンポーネントは、XML ドキュメントを作成するメソッドを提供しません。したがって、XML ドキュメントを動的に作成する必要がある場合は、DOM コンポーネントを使用して作成することがよくあります。 DOM は Document Object Model の略称で、DOM コンポーネントは XML ドキュメントのツリー解析モードを提供します。次のコードは、DOM コンポーネントを使用して XML ドキュメントを作成します。
コードをコピーします
コードは次のとおりです: //新しいDOMドキュメントを作成します
$dom = new DomDocument()
//ルートノードに部門タグを作成します。
$Departs = $dom->createElement('Departs');
$dom->appendChild($Departs);
//Department タグの下にDepartment サブタグを作成します
$Depart = $dom-> createElement('Depart') ;
$Departs->appendChild($Depart);
//deployees タグの下にemployees サブタグを作成します
$employees = $dom->createElement('employees'); >appendChild($employees );
//employees タグの下に従業員のサブタグを作成します
$employee = $dom->createElement('employee');
$employees->appendChild($employee);従業員タグの下に Serial_no を作成します 子タグ
$serial_no = $dom->createElement('serial_no');
$employee->appendChild($serial_no);
//serial_no タグに値ノード 100001 を追加します
$serial_no_value = $dom->createTextNode ('100001');
$serial_no->appendChild($serial_no_value);
echo $dom->saveXML()?>
出力結果は次のようになります。次のように。
<退職>
<従業員> 100001
従業員>
XML ドキュメントを動的に作成するだけでなく、DOM コンポーネントを使用して XML ファイルを読み取ることもできます。次のコードは、上記の XML ファイルの読み取りを実装します。
コードをコピー
コードは次のとおりです:
$dom = new DomDocument(); //DOMオブジェクトを作成します
$dom->load('example.xml'); //XML ファイルを取得します
$root = $dom->documentElement; //XML データのルートを取得します
read_child($root) //read_child 関数を呼び出してルート オブジェクトを読み取ります
function read_child($); node)
{ $children = $node->childNodes; // $node のすべての子ノードを取得しますforeach($children as $e) // 各子ノードを読み取るループ{ if($e-> ;nodeType == XML_TEXT_NODE) / /子ノードがテキスト型の場合、出力
{
echo $e->nodeValue.”
”
}
else if($e->nodeType = = XML_ELEMENT_NODE) //子ノードがノードオブジェクトの場合、関数処理を呼び出します
{
read_child($e)
}
}
?> 実行結果は以下の通りです。
コードをコピー
コードは次のとおりです:
見積もり
制作サポート
100001
Simon
24
1982-11-06
5000.00
1000.00
100 002
エレイン
24 1982-01-01 6000.00 2000.00 テストセンター
110001
ヘレン
23
1983-07-21
5000.00
1000.00
上記の例では、再帰的な方法でXMLデータを処理し、XMLデータ内の全てのテキストタグを出力する機能を実現しています。
4 XML アプリケーション例 - ゲストブック
XML の基本的な操作については以前に紹介しましたが、このセクションでは XML ゲストブックの設計を例として、実際のアプリケーションで PHP と XML データの対話型操作を実現する方法を詳しく説明します。
4.1 XML ファイル構造の設計
XML ファイルは、ゲストブック内のメッセージである XML データを保存するために使用されます。ここで、XML データには、メッセージごとに、主にメッセージのタイトル、メッセージの作成者名、メッセージの内容の 3 つの内容が含まれます。したがって、XML ファイルの形式は次のように設計されています。
コードをコピーします コードは次のとおりです:
メッセージのタイトル>
<著者>コメント者コンテンツ>コンテンツ>
;
4.2 投稿ページの書き方
メッセージ投稿ページは2ページで構成されています。 1 つは訪問者がメッセージを作成できるフォームの HTML ファイルで、もう 1 つは訪問者の入力を処理するために使用される PHP スクリプトです。フォームの HTML コードを以下に示します。
コードをコピーします
コードは次のとおりです:
<フォーム名=”form1” メソッド=”post” アクション=”Post.php”>
$author = $guestbook- >createElement( 'author');
$author->appendChild($guestbook->createTextNode($_POST['author']));
$thread->appendChild($author);新しいスレッド ノード
$content = $guestbook->createElement('content'); $content->appendChild($guestbook->createTextNode($_POST['content'])); にコンテンツ タグを作成します。 $thread-> ;appendChild($content); //XML データをファイルに書き込みます$fp = fopen("DB/guestbook.xml", "w"); >saveXML( ))) echo "メッセージが送信されました";
else
echo "メッセージが送信されました"
;
図 2 に示すように、ブラウザーで上記の HTML ファイルを実行し、適切なメッセージの内容を入力します。
'700')this. style="max-width:90%";" border="0">
図2 新しいメッセージインターフェイス
押した後[送信]をクリックボタンをクリックすると、XML ファイルの内容は次のようになります。
4.3 表示ページの作成
表示ページは、先ほど紹介した SimpleXML コンポーネントを使用して簡単に実装できます。具体的な実装コード 以下に示すように
コードをコピーします コードは次のとおりです:
//メッセージを保存するために使用される XML ファイルを開きます
$guestbook = simplexml_load_file('DB/guestbook .xml');
foreach ($guestbook->thread as $th) //XML データ内の各スレッドタグを読み取るループ
{
echo "Title:".$th ->タイトル."
”;
echo “著者: ”.$th->author.”
”;
echo “内容: ”.$th->content.””;
echo “
”
図 3 に示すようにブラウザーで
'700')this.width='700';if(this.offsetHeight>'700')this.height='700';" border=0>
www.bkjia.comtruehttp://www.bkjia.com/PHPjc/322160.html技術記事 XML は、データベースのような形式でデータを保存する、一般的な半構造化ファイル形式です。実際のアプリケーションでは、単純でセキュリティの低いデータには XML ファイルがよく使用されます...