ホームページ >php教程 >php手册 >PHP ツールキット expat を使用して XML を解析する

PHP ツールキット expat を使用して XML を解析する

WBOY
WBOYオリジナル
2016-06-21 09:10:15790ブラウズ

xml

最近では、ほぼすべてのデータ ソースからのデータを簡単にフォーマットして表示できるようにする XML を Web 開発者の親友として宣伝しています。ただし、適切にフォーマットされたデータは、動的コンテンツにとって理想的なものとは程遠いです。ほとんどの Web 開発者は、今日の Web が動的コンテンツなしでどのように機能するかを教えてくれます。問題は、「XML を使用して動的コンテンツを作成するにはどうすればよいですか?」です。その答えは、PHP や Perl などの動的コンテンツ処理言語を使用して XML を解析することです。さまざまな目的に XML を使用します。これは、XML を解析できるツールキットを使用することに他なりません。 James Clark は expat と呼ばれるツールキットを提供しています。 expat XML ツールキットは C 言語を使用して XML を解析するため、PHP と XML を簡単に連携させることができます。

PHP は、Web 専用に設計された優れたスクリプト言語です。 XML は、Web コンテンツを表現するための標準です。この二つが力を合わせたらどんなに素晴らしいでしょう!

以下に簡単な例を示します。この例では、PHP を使用して XML ドキュメントを HTML に解析する方法を示します。次に、PHP の他の XML 概念をいくつか紹介します。 PHP を使用した XML の解析はシンプルで直感的ですが、詳細については説明が必要です。一度本当にコツを掴んでしまえば、なぜもっと早くこれらを組み合わせることを思いつかなかったのかに驚くでしょう。


概要
PHP は、XML ツールキットである expat を使用して、C 言語を通じて XML を解析します。このツールキットの関数セットは、Perl XML 解析で使用される関数セットと同じです。また、このツールキットはイベント駆動型パーサーです。つまり、expat は各 XML タグまたはコードの新しい行をイベントの開始として扱い、そのイベントが関数のトリガーとなります。 Expat のインストールは非常に簡単です。Apache Web サーバーを使用している場合は、PHP XML リファレンス ページでインストールとダウンロードの手順を見つけることができます。

PHP で XML を解析する基本的なタスクは次のとおりです。まず、XML パーサーのインスタンスを作成します。次に、開始タグや終了タグ​​など、トリガー イベントを処理する関数を定義します。続いて、実際のデータ処理手順を定義します。最後に、XML ファイルが開かれ、ファイル データが読み取られて、データが解析されます。その後、ファイルを閉じると XML パーサーが解放されます。

ほら、先ほども言ったように、この手順には特別なことは何もありません。ただし、具体的な例について説明する前に、いくつかの注意点があります:

Expat は XML を検証しません。これは、XML ファイルが整形式である限り、つまりすべての要素が適切にネストされており、開始タグと終了タグにエラーがない限り、解析されることを意味します。 Expat は、XML が XML ファイル ヘッダーで参照される標準または定義に準拠しているかどうかを気にしません。
Expat はすべての XML タグを大文字に変換します。スクリプトのタグ名やその他のコンテンツに大文字と小文字が混在している場合は注意してください。
PHP はマジック クオート設定を有効にしてコンパイルされるため、複雑な XML ファイルは正しく解析されません。魔法の引用符がデフォルト設定ではない場合は、私がそれを言わなかったことにしてください。
それでは、関連する例を見てみましょう!



基本的な例

複雑なことを簡素化するために、この例ではエラー チェックやその他の不必要なものを省略しています。 もちろん、独自のコードで必要なことを実行できます。読者はすでに PHP とその構文に精通していることを前提として、XML 関数について説明します。最初にスクリプトとは何かを説明し、次に実際にそれを参照するコードの前にあるユーザー定義関数を定義します。関連添付ファイル: プログラム リスト A はスクリプトの完全なコードを示し、スクリプトによって解析される XML ドキュメントは関連添付ファイル: プログラム リスト B です。処理後の出力結果を表 A に示します。

XML の記事

「プログラマのための修復 XML: 基本構文」 3 部構成シリーズの最初の回では、XML とその基本構文について紹介します。

「修復 XML: DTD によるドキュメント形式の強制」 XML ドキュメントの構造要件を強制するには、XML の付随テクノロジの 1 つであるデータ型定義 (DTD) を利用する必要があります。

「修復 XML: XML スキーマの使用」 この記事では、XML の欠点について簡単に触れます。 DTD について説明し、より新しく強力な標準である XML スキーマの基本について説明します。

「修復 XML: DOM に挨拶をする」 ここで、プログラマーの帽子をかぶって、簡単な操作を提供するドキュメント オブジェクト モデル (DOM) について学びましょう。ツリー状のオブジェクトのセットを介して XML ドキュメントにアクセスします。

「Remedial XML: SAX の使い方を学ぶ」 Remedial XML シリーズの第 5 回では、SAX API を紹介し、SAX 実装へのリンクをいくつか提供します。いくつかの言語で説明しています



表 A PHP による XML 解析の出力結果

まず、XML パーサーのインスタンスを作成しました:
$parser = xml_parser_create();

次に、パーサーが開始タグと終了タグに遭遇したときに何を行うかを定義します。 「startElement」と「endElement」はユーザー定義関数であることに注意してください。もちろん、好みに応じて他の名前を付けることもできますが、私が付けた名前は標準的な規則です。
xml_set_element_handler($parser, “startElement”, “endElement”);

次に、データ操作を定義しました。ここでの「characterData」もユーザー定義関数であり、名前も慣習的です。
xml_set_character_data_handler($parser, “characterData”);

次に、ファイルを開いてデータを読み取ります。ここでエラー処理コードの作成を開始できます。この例ではこれらのエラー処理を省略しています。スクリプトの先頭で $xml_file を定義することを忘れないでください。
$filehandler = fopen($xml_file, "r");

ファイルの内容の読み取りを一度に 4K バイトずつ開始し、ファイルの終わりまで変数 "$data" に入れます。 xml_parse を使用して、読み取ったデータ セグメントを解析します。
while ($data = fread($filehandler, 4096)) {
xml_parse($parser, $data, feof($filehandler));
}

最後に、ファイルをクリアして閉じ、パーサーを解放します。
fclose($filehandler);
xml_parser_free($parser);

上記はスクリプトで使用されるすべての XML 関数です。次に、その中で使用される 3 つのユーザー定義関数について詳しく説明します。 「endElement」と「characterData」。


xml_parse が のような開始タグに遭遇すると、XML パーサーによって「startElement」関数が呼び出されます。この場合、パーサーは $parser です。この関数は定義が必要な関数であり、自動的に渡される 3 つのパラメータがあります。XML パーサー インスタンス、URL などの大文字の要素名、要素が持つ属性の配列です。上の例では、XML ファイル内の要素に属性コレクションがないため、配列パラメータは空ですが、このパラメータは存在する必要があります。

この例では、XML データを HTML テーブルに表示することにしました。上に示したように、簡単にするためにエラー処理コードは作成しませんでした。 XML ファイル内でタグが出現する順序がわかっているので、ここでトリックを実行します。それ以外の場合は、「startElement」、「characterData」、「endElement」関数で配列を定義し、別の関数で結果を表示することもできます。

function startElement($parser_instance, $element_name, $attrs) {
switch($element_name) {
case "URL" : echo " Break;
case "SUMMARY" : echo "";
Break;
}
}


要素タグを処理した後、xml_parse は XML データを検出すると "characterData" 関数を呼び出します。この関数は、によっても自動的に呼び出されます。パーサー。この関数には、パーサー インスタンスとデータを含む文字列の 2 つのパラメーターが必要です。
echo $xml_data;
}

最後に、xml_parse は終了タグに遭遇し、「」を実行します。 endElement" 関数。この関数は、パーサー インスタンスと要素名という 2 つのパラメーターを受け取ります。
function endElement($parser_instance, $element_name) {
switch($element_name) {
case "URL" : echo "">";
Break;
case "TITLE" : echo "
";
Break;
case "SUMMARY" : echo "";
Break;
}
}


PHP を使用して XML を解析する軽い練習はここで終わりました。いくつかの重い作業を追加してみましょう。

追加機能

PHPには他にもXML解析に関連する機能があります。 PHP.net のドキュメントには、これらの関数の完全な説明が記載されています。ここでは、すぐに必要になる可能性のあるいくつかについて説明しました:

xml_set_default_handler() - この関数は xml_set_character_data_handler() 関数と同様に機能しますが、定義されたものはすべてキャプチャされます。この関数は、データの処理を制御するために文書型宣言でよく使用されます。
xml_parser_set_option() - この関数を使用して、文字の大文字化を無効にしたり、代替の文字エンコード セットを選択したりできます。
xml_parse_into_struct() - この関数は、「startElement」、「characterData」、「endElement」関数の呼び出しをスキップし、データを配列に直接入れるために使用されます。
xml_error_string() - この関数は、xml_parser() エラーからテキスト情報を取得するために使用されます。
xml_get_error_code() - この関数を使用して、上記のエラー文字列を取得できます。後の 2 つの関数の使用法は次のようになります: if(!xml_parse($parser, $data, feof($filehandler))) { die(xml_error_string(xml_get_error_code($parser)); )
すでに使用していると思われる場合は、 PHP のマニュアル ページにある XML 外部エンティティの例を注意深く読むことをお勧めします。これらの例は、この記事で説明されていない他の概念と、ファイル エラーを処理するためのいくつかのテクニックを示唆しています。


概要
この記事では、PHP と XML の緊密な統合プロセスについて説明します。どちらのテクノロジーも Web 中心の性質を持っているため、動的なコンテンツのニーズに対する理想的なソリューションとなります。



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。