ホームページ >バックエンド開発 >PHPチュートリアル >PHP は XML を処理します
【IT168 特別記事】シンプル、とてもシンプル
ここ数年、洞窟に隠れていた人でない限り、XML について聞いたことがあるはずです (XML は、ますます多くの Web パブリッシャーがコンテンツの作成に注目しているツールです)マークアップボックス)。ユーザー定義のタグを含む XML ドキュメントやタグが実際に動作しているのを見たことがあるかもしれません。複雑なコードの混乱を一体どうやって人が判読可能なコンテンツに変換できるのか疑問に思ったことがあるかもしれません。
答えは、簡単ではありません。
PHP には、バージョン 4.0 以降、XML を解析する (意味を理解する) 2 つの標準的な方法 (SAX と DOM) のサポートが含まれていますが、これらの方法の複雑さと固有の奇妙さにより、最も熱心な XML 開発者以外のすべての開発者が諦めることができないことがよくあります。 。ただし、PHP 5.0 では、このすべてが変更され、SimpleXML と呼ばれる新しい XML 拡張機能が導入され、XML ドキュメントを操作する際の苦痛がすべて (つまり、すべて) 取り除かれます。その方法については、読み続けてください。
昔の悪い時代
SimpleXML がなぜ非常に優れているのかを理解するために、簡単な歴史のレッスンをしてみましょう。
SimpleXML が登場する前は、XML ドキュメントを処理する方法が 2 つありました。 1 つ目は、SAX または XML 用の単純な API です。これには、XML ドキュメントを走査し、パーサーがさまざまなタイプのタグを検出したときに特定の関数を呼び出すことが含まれます。たとえば、開始タグを処理するために 1 つの関数を呼び出し、終了タグを処理するために別の関数を呼び出し、その間のデータを処理するために 3 番目の関数を呼び出したとします。 2 番目のアプローチは DOM (ドキュメント オブジェクト モデル) です。これには、XML ドキュメントを表すツリーをメモリ内に作成し、ツリー トラバーサル メソッドを使用してそれを操作します。ツリーの特定のノードに到達すると、対応するコンテンツを取得して使用できます。
どちらのアプローチも、特にユーザーフレンドリーではありません。SAX では、開発者が XML ファイル内で検出される要素のタイプごとにイベント ハンドラーをカスタマイズする必要がありますが、DOM アプローチでは、メモリを大量に消費するオブジェクト指向パターンが使用されるため、大規模な XML ドキュメントの場合は非効率的ですが、開発者の労力は必要ない傾向があります。より大きな文脈では、PHP 4 はさまざまな XML 拡張機能に対して多数の異なるサポート ライブラリを使用しているため、さまざまな XML 拡張機能の動作方法に不一致が生じ、相互運用性に関する懸念が生じます (開発者に対する懸念には多くの混乱が伴います)。
PHP 5.0 では、この問題は、すべての XML 拡張機能の標準ライブラリとして libxml2 ライブラリ (http://www.xmlsoft.org/) を採用し、さまざまな XML 拡張機能の操作の一貫性を高めるための調整された取り組みによって修正されました。 PHP 5 での XML への最大の変更は、Sterling Hughes、Rob Richards、Marcus Börger によって開発された SimpleXML 拡張機能ですが、この拡張機能は、PHP 5 での XML ドキュメントの解析を、PHP 4 での XML ドキュメントの解析よりもユーザーフレンドリーにすることを目的としています。
SimpleXML は、XML ドキュメントをオブジェクトに変換し、ドキュメント内の要素を標準のオブジェクト表記を使用してアクセスできるオブジェクト プロパティに変換することによって機能します。これにより、XML 階層内の任意のレベルの要素に簡単にアクセスして、そのコンテンツにアクセスできるようになります。ドキュメント ツリーの同じレベルにある繰り返し要素は配列として表されますが、要素のカスタマイズ可能なコレクションは XPath (詳細は後述) の位置パスを使用して作成でき、これらのコレクションは PHP の標準ループ構造を使用して処理できます。要素のプロパティへのアクセスは、連想配列のキーにアクセスするのと同じくらい簡単です (新しく学習することや特別なコードを記述する必要はありません)。
SimpleXML と PHP を一緒に使用するには、PHP ビルドに SimpleXML のサポートが含まれている必要があります。このサポートは、PHP 5 の UNIX および Windows バージョンではデフォルトで有効になっています。詳細については、http://www.php.net/manual/en/ref.simplexml.php を参照してください。 PHP 4 ユーザーの場合は運が悪いです。SimpleXML は PHP 5 でのみ使用できます。
Children's Zoo
SimpleXML の仕組みを理解するには、次の XML ファイルを考えてください。年齢 > 年齢 > 種 > 母親 >父親 >/ 両親 >
ここで、
php // XML ファイルの名前を設定 $file = " pet.xml " ; // ファイルをロード $xml = simplexml_load_file($file) または die ( " XML ファイルをロードできません! " );データ エコー " 名前: " . " n " ; エコー " 種: " . " ; echo " 親: " . $xml ->parents -> mother . " および " . $xml ->parents -> Father . " n " ; ?>
アクションは simplexml_load_file( ) 関数 最初に、この関数は解析する XML ファイルのパスと名前を受け取ります。ファイル解析の結果は、ルート要素以下の要素に対応するプロパティを持つ PHP オブジェクトです。したがって、要素内の文字データには、標準のオブジェクト->プロパティ表記を使用して、最初にルート要素から開始してファイルの階層パスを下ってアクセスできます。
オペレーションを読み取ることができるのと同じように、オペレーションを書くこともできます。 SimpleXML を使用すると、特定の XML 要素の内容を簡単に変更できます (対応するオブジェクト プロパティに新しい値を割り当てるだけです)。以下に例を示します:
php // XML ファイルの名前を設定 $file = " pet.xml " ; // ファイルをロード $xml = simplexml_load_file($file) or die ( " XML ファイルをロードできません! " ); // XML データを変更します $xml -> 年齢 = 4 ; $xml -> " Sue Snail " ; $xml ->parents -> Sid Snail " // ファイルに新しいデータを書き込みます ($file, $xml -> asXML());まず XML ファイルが読み取られ、その後、対応するオブジェクト属性に新しい値が割り当てられて、各要素内の文字データが変更されます。通常、XML ツリーを標準出力デバイスに出力するために使用される asXML() メソッドを、この例では file_put_contents() 関数と組み合わせて、元の XML ドキュメントを新しいデータで上書きします。
将来はどうなるか
php // XML 文字列を作成します $str = << XML バージョン = " 1.0 " ?< 形状の種類 = " 円 " 2 " /> 形状の種類 = " 長方形 " 長さ = " 2 " /> 形状の種類 = " 7 " // load string $xml = simplexml_load_string($str) or die ( " XML 文字列をロードできません! " ); // 形状ごとに // 面積を計算します ($xml ->shape as $shape) { if ($shape[ ' タイプ ' ] == " 円 " ) { $area = pi() * $shape[ ' 半径 ' ] * $shape[ ' 半径 ' ] } elseif ($shape[ ' タイプ ' ] == " 長方形 " ); { $area = $shape[ ' length ' ] * $shape[ ' width ' ]; } elseif ($shape[ ' type ' ] == " square " ) { $area = $shape[ ' length ' ] * $shape [ ' length ' ]; } echo $area. " n " ; >
外部 XML ファイルを使用する例とは異なり、この例では XML ドキュメントを動的に作成し、simplexml_load_string() メソッドを使用して読み込みます。それをSimpleXMLの真ん中に入れます。その後、XML は foreach() ループを使用して解析され、各
X は点を表します
SimpleXML は、XPath 位置パスを介した要素コレクションのカスタマイズもサポートしています。 XML を初めて使用する人のために説明すると、XPath は、開発者がドキュメント内の要素、属性、またはテキスト ノードのコレクションにアクセスできるようにする標準の XML ドキュメント アドレス指定メカニズムです。 XPath の詳細については、http://www.w3.org/TR/xpath.html および http://www.melonfire.com/community/columns/trog/article.php?id=83 を参照してください
その仕組みを理解するには次の XML ドキュメントを考えてみましょう:
< xml version = " 1.0 " ?> < desc > 2 数量 > 数量 > ; アイテム 説明 > 1 説明 > ; < 数量 >/ アイテム > 数量 > < アイテム > アイテム > 数量 > > ライムジュース desc > 2 item > >
; すべてのphp // XML ファイルの名前を設定 $file = " sinners.xml " ; // ファイルをロード $xml = simplexml_load_file($file) または die ( " XML ファイルをロードできません! " );すべての
以下に示すように、XML で一連の映画レビューがあると仮定します。
<? XML バージョン = " 1.0 " ?> 120 継続時間 > 2001 年 > レビュー> したがって、このファイルからデータを抽出し、それを HTML モジュール内の適切な位置に配置するには、PHP スクリプトが必要になります。言ってみれば、これは簡単です、次のように下代が演じている那样:
php // XML ファイルの名前を設定します // 通常、これは GET を介して取得されます // 簡単にするためにここに組み込まれています $file = " 57.xml " ; // ファイルをロード $xml = simplexml_load_file($file) or die ( " XML ファイルをロードできません! " ); ?> <; html > <;頭 > <; Basefont face = " Arial " > php echo $xml ->タイトル; ?> ( php echo $xml -> year; ?> ) h1 > <; h3 > php echo $xml ->ティーザー; ?> h3 > php echo $xml ->体; ?> 監督: php echo $xml ->監督; ?> b > 期間: php echo $xml ->間隔; ?>分 b > キャスト: php foreach ($xml ->cast ->person as $person) { echo "$person "; } ?> b > 評価: php echo $xml ->評価; ?> b > フォント > ボディ>