PHP XML Expat パーサー

PHP XML Expat パーサー


組み込みの Expat パーサーにより、PHP で XML ドキュメントを処理できるようになります。


XML とは何ですか?

XML はデータを記述するために使用され、データの内容に重点が置かれます。 XML ファイルはデータの構造を記述します。

XML には、事前定義されたタグはありません。独自のタグを定義する必要があります。

XML について詳しくは、XML チュートリアルをご覧ください。


Expatとは何ですか?

XML ドキュメントの読み取りと更新、作成、処理を行うには、XML パーサーが必要です。

XML パーサーには 2 つの基本的なタイプがあります:

· ツリーベースのパーサー: このパーサーは XML ドキュメントをツリー構造に変換します。ドキュメント全体を分析し、ドキュメント オブジェクト モデル (DOM) などのツリー内の要素へのアクセスを提供します。

· イベントベースのパーサー: XML ドキュメントを一連のイベントとして扱います。特定のイベントが発生すると、パーサーはそれを処理する関数を呼び出します。

Expat パーサーはイベントベースのパーサーです。

イベントベースのパーサーは、XML ドキュメントの構造ではなくコンテンツに焦点を当てます。このため、イベントベースのパーサーはツリーベースのパーサーよりも高速にデータにアクセスできます。

次の XML スニペットを見てください:

<from>Jani</from>

イベントベースのパーサーは、上記の XML を 3 つのイベントのシーケンスとして報告します:

·使用する イベントベースのパーサーで使用する. CDATA セクション、値: Jani

· 終了要素: from

上記の XML の例には、整形式の XML が含まれています。ただし、このインスタンスには関連付けられた文書型宣言 (DTD) がないため、無効な XML です。

ただし、Expat パーサーを使用する場合には違いはありません。 Expat は、有効性をチェックせず、DTD を無視するパーサーです。

イベントベースの非検証 XML パーサーとして、Expat は高速かつ軽量であるため、PHP Web アプリケーションに非常に適しています。

注: XML ドキュメントは適切な形式である必要があります。そうでない場合、Expat はエラーを生成します。


インストール

XML Expat パーサー関数は、PHP コアの不可欠な部分です。これらの機能を使用するためにインストールは必要ありません。


XML ファイル

この例では次の XML ファイルが使用されます:

<?xml version="1.0" encoding="ISO-8859-1"?>
 <note>
 <to>Tove</to>
 <from>Jani</from>
 <heading>Reminder</heading>
 <body>Don't forget me this weekend!</body>
 </note>


XML パーサーの初期化

さまざまな XML に対して PHP で XML パーサーを初期化します。次に、定義ハンドラーが XML ファイルを解析します。

<?php
 //Initialize the XML parser
 $parser=xml_parser_create();
 
 //Function to use at the start of an element
 function start($parser,$element_name,$element_attrs)
 {
 switch($element_name)
 {
 case "NOTE":
 echo "-- Note --<br>";
 break;
 case "TO":
 echo "To: ";
 break;
 case "FROM":
 echo "From: ";
 break;
 case "HEADING":
 echo "Heading: ";
 break;
 case "BODY":
 echo "Message: ";
 }
 }
 
 //Function to use at the end of an element
 function stop($parser,$element_name)
 {
 echo "<br>";
 }
 
 //Function to use when finding character data
 function char($parser,$data)
 {
 echo $data;
 }
 
 //Specify element handler
 xml_set_element_handler($parser,"start","stop");
 
 //Specify data handler
 xml_set_character_data_handler($parser,"char");
 
 //Open XML file
 $fp=fopen("test.xml","r");
 
 //Read data
 while ($data=fread($fp,4096))
 {
 xml_parse($parser,$data,feof($fp)) or 
 die (sprintf("XML Error: %s at line %d", 
 xml_error_string(xml_get_error_code($parser)),
 xml_get_current_line_number($parser)));
 }
 
 //Free the XML parser
 xml_parser_free($parser);
 ?>

上記のコードは出力します:

-- Note --

To: Tove

From: Jani
見出し: リマインダー
メッセージ: 今週末は私を忘れないでください!

動作原理:

1. xml_parser_create() 関数を使用して XML パーサーを初期化します

2. さまざまなイベント ハンドラーに一致する関数を作成します

3. パーサーがどのイベントに遭遇したかを定義する xml_set_element_handler() 関数を追加します。開始タグと終了タグに到達すると関数が実行されます

4. xml_set_character_data_handler() 関数を追加して、パーサーが文字データを検出したときに実行される関数を定義します

5. xml_parse() 関数を使用してファイル「test. xml"

6. エラーが発生した場合は、xml_error_string() 関数を追加して XML エラーをテキスト説明に変換します

7. xml_parser_free() 関数を呼び出して、xml_parser_create() 関数に割り当てられたメモリを解放します

PHP XML パーサーの概要

XML 関数を使用すると、XML ドキュメントを解析できますが、検証はできません。

XML は、標準的な構造化ドキュメントの交換に使用されるデータ形式です。 XML の詳細については、php.cn を参照してください。

この拡張機能は Expat XML パーサーを使用します。

Expat は、XML ドキュメントを一連のイベントとして扱うイベントベースのパーサーです。イベントが発生すると、指定された関数を呼び出してそれを処理します。

Expat は、ドキュメントにリンクされている DTD を無視する検証のないパーサーです。ただし、ドキュメントの形式が適切でない場合は、エラー メッセージが表示されます。

Expat はイベントベースで検証不要のパーサーであるため、高速であり、Web アプリケーションに適しています。

XML パーサー関数を使用すると、XML パーサーを作成し、XML イベントのハンドラーを定義できます。


インストール

XML パーサー関数は、PHP コアの不可欠な部分です。これらの機能を使用するためにインストールは必要ありません。

PHP XML パーサー関数

PHP: この関数をサポートする最も古い PHP バージョンを示します。


QQ截图20161009165838.png

PHP XML パーサー定数

QQ截图20161009165856.png

QQ截图20161009165909.png


学び続ける
||
<?php //Initialize the XML parser $parser=xml_parser_create(); //Function to use at the start of an element function start($parser,$element_name,$element_attrs) { switch($element_name) { case "NOTE": echo "-- Note --<br>"; break; case "TO": echo "To: "; break; case "FROM": echo "From: "; break; case "HEADING": echo "Heading: "; break; case "BODY": echo "Message: "; } } //Function to use at the end of an element function stop($parser,$element_name) { echo "<br>"; } //Function to use when finding character data function char($parser,$data) { echo $data; } //Specify element handler xml_set_element_handler($parser,"start","stop"); //Specify data handler xml_set_character_data_handler($parser,"char"); //Open XML file $fp=fopen("test.xml","r"); //Read data while ($data=fread($fp,4096)) { xml_parse($parser,$data,feof($fp)) or die (sprintf("XML Error: %s at line %d", xml_error_string(xml_get_error_code($parser)), xml_get_current_line_number($parser))); } //Free the XML parser xml_parser_free($parser); ?>
  • おすすめコース
  • コースウェアのダウンロード
現時点ではコースウェアはダウンロードできません。現在スタッフが整理中です。今後もこのコースにもっと注目してください〜