PHP完全独学マニュアルlogin
PHP完全独学マニュアル
著者:php.cn  更新時間:2022-04-15 13:53:54

PHP XML 拡張



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


XML とは何ですか?

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

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

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

お勧めのビデオチュートリアル: "xmlチュートリアル"http://www.php.cn/course/list/60.html


Expatとは何ですか?

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

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

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

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

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

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

次の XML フラグメントを見てください:

<from>Jani</from>
のイベントベースのパーサーは、上記の XML を 3 つのイベントのシーケンスとして報告します:
  • 開始要素: from

  • Start 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 パーサーの初期化

PHP で XML パーサーを初期化し、さまざまな 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
Heading: Reminder
Message: Don't forget me this weekend!
動作原理:
  1. xml_parser_create() 関数を使用して XML パーサーを初期化します

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

  3. xml_set_element_handler() 関数を追加して、パーサーが開始タグと終了タグに遭遇したときに実行する関数を定義します

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

  5. xml_parse() 関数を通じてファイル「test.xml」を解析します

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

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


PHP Expat パーサーの詳細情報

詳細情報 詳細情報PHP Expat 関数については、PHP XML パーサー リファレンス マニュアル をご覧ください。

PHP中国語ウェブサイト