組み込みの Expat パーサーを使用すると、PHP で XML ドキュメントを処理できます。
XML はデータを記述するために使用され、データが何であるかに重点が置かれます。 XML ファイルはデータの構造を記述します。
XML には、事前定義されたタグはありません。独自のタグを定義する必要があります。
XML について詳しくは、XML チュートリアルをご覧ください。
XML ドキュメントの読み取りと更新、作成、処理を行うには、XML パーサーが必要です。
XML パーサーには 2 つの基本的なタイプがあります。
ツリーベースのパーサー: このパーサーは、XML ドキュメントをツリー構造に変換します。ドキュメント全体を分析し、ドキュメント オブジェクト モデル (DOM) などのツリー内の要素へのアクセスを提供します。
イベントベースのパーサー: XML ドキュメントを一連のイベントとして処理します。特定のイベントが発生すると、パーサーはそれを処理する関数を呼び出します。
Expat パーサーはイベントベースのパーサーです。
イベントベースのパーサーは、XML ドキュメントの構造ではなくコンテンツに焦点を当てます。このため、イベントベースのパーサーはツリーベースのパーサーよりも高速にデータにアクセスできます。
次の XML フラグメントを参照してください。
<from>ジャニ</from>
イベントベースのパーサーは、上記の XML を 3 つのイベントのシーケンスとして報告します。
開始要素: から
CDATA セクションの開始、値: Jani
要素を閉じる: から
上記の XML の例には、整形式の XML が含まれています。ただし、このインスタンスには関連付けられた文書型宣言 (DTD) がないため、無効な XML です。
ただし、Expat パーサーを使用する場合には違いはありません。 Expat は、有効性をチェックせず、DTD を無視するパーサーです。
Expat はイベントベースの非検証 XML パーサーとして高速かつ軽量であるため、PHP Web アプリケーションに最適です。
注: XML ドキュメントは適切な形式である必要があり、そうでない場合は Expat でエラーが発生します。
XML Expat パーサー関数は、PHP コアの不可欠な部分です。これらの機能を使用するためにインストールは必要ありません。
この例では、次の XML ファイルが使用されます。
<?xml version="1.0"coding="ISO-8859-1"?><note><to>トーベ</to><from>ジャニ</from><見出し>リマインダー</見出し><本文>ドン今週末は私を忘れないでください!</body></note>
PHP で XML パーサーを初期化し、さまざまな XML イベントのハンドラーを定義してから、XML ファイルを解析する必要があります。
<?php//XML パーサーを初期化します$parser=xml_parser_create();//要素の開始時に使用する関数function start($parser,$element_name,$element_attrs) { switch($element_name) { case "NOTE": echo "-- 注意 --<br>"; ケース "TO": ブレイク; ケース "から: "; "HEADING": echo "Heading: "; case "BODY": echo "Message: " } }//要素の最後に使用する関数 stop($parser,$element_name) { echo "; "; }//文字データを検索するときに使用する関数function char($parser,$data) { echo $data; }//要素を指定handlerxml_set_element_handler($parser,"start","stop");//データを指定 handlerxml_set_character_data_handler($parser,"char");//XML ファイルを開く$fp=fopen("test.xml","r");/ /Read datawhile ($data=fread($fp,4096)) { xml_parse($parser,$data,feof($fp)) または die (sprintf("XML エラー: %s 行 %d", xml_error_string(xml_get_error_code($parser)), xml_get_current_line_number($parser))); }/ /XML parserxml_parser_free($parser);?> を解放します。
上記のコードは次のように出力します。
-- 注 --To: ToveFrom: JaniHeading: ReminderMessage: 今週末は私を忘れないでください!
仕組み:
xml_parser_create() 関数を使用して XML パーサーを初期化します。
さまざまなイベント ハンドラーで動作する関数を作成する
xml_set_element_handler() 関数を追加して、パーサーが開始タグと終了タグを検出したときに実行する関数を定義します。
xml_set_character_data_handler() 関数を追加して、パーサーが文字データを検出したときに実行する関数を定義します。
xml_parse() 関数を使用してファイル「test.xml」を解析します。
エラーが発生した場合は、XML エラーをテキストの説明に変換する xml_error_string() 関数を追加します。
xml_parser_free() 関数を呼び出して、xml_parser_create() 関数に割り当てられたメモリを解放します。
PHP Expat 関数の詳細については、PHP XML パーサー リファレンス マニュアルを参照してください。