PHP XML 拡張LOGIN

PHP XML 拡張

PHP XML Expat Parser

XML は、データベースのような形式でデータを保存する一般的な半構造化ファイル形式です。 実際のアプリケーションでは、単純でセキュリティの低いデータが XML ファイル形式で保存されることがよくあります。 この利点は、データベースとの対話操作を減らして読み取り効率を向上できる一方で、XML の利点を有効に活用してプログラム作成の難易度を軽減できることです。

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

XML とは何ですか?

XMLとは「eXtensible Markup Language」の略で、HTMLと似たマークアップ言語です。 ただし、HTML とは異なり、XML は主にデータの記述とデータの保存に使用され、HTML は主にデータの表示に使用されます。

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

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

例:

   <?xml version="1.0"?>
        <threads>
            <thread>
                <title>Welcome </title>
                <author>Simon </author>
                <content>Welcome to XML guestbook!! </content>
             <thread>
        </threads>

XML ファイルの先頭では、通常、<?xml version="1.0"?> は XML データの先頭を識別するために使用され、XML データは標準のバージョン情報を使用します。

<thread> および <thread> タグはこれをメッセージとしてマークします。メッセージにはタイトル、作成者、内容があり、メッセージメッセージを完全に表現します。

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

エクスパットとは何ですか?

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

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

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

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

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

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

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

<from>Jani</from>

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

start 要素: 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
//初始化XML解析器
$parser=xml_parser_create();
//在元素开始时使用的函数
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 stop($parser,$element_name)
{
echo "<br>";
}
//查找字符数据时使用的函数
function char($parser,$data)
{
echo $data;
}
//指定元素的处理
xml_set_element_handler($parser,"start","stop");
//指定数据处理程序
xml_set_character_data_handler($parser,"char");
//打开XML文件
$fp=fopen("test.xml","r");
//读取数据
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)));
}
//释放内存
xml_parser_free($parser);
?>

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

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

仕組み:

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

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

3. パーサーが開始タグと終了タグを検出したときに実行する関数を定義するための xml_set_element_handler() 関数を追加します。

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

5. エラーが発生した場合は、xml_parse() 関数を使用します。 add xml_error_string() 関数は、XML エラーをテキストの説明に変換します

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

PHP Expat パーサーの詳細情報

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

次のセクション

<?php //初始化XML解析器 $parser=xml_parser_create(); //在元素开始时使用的函数 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 stop($parser,$element_name) { echo "<br>"; } //查找字符数据时使用的函数 function char($parser,$data) { echo $data; } //指定元素的处理 xml_set_element_handler($parser,"start","stop"); //指定数据处理程序 xml_set_character_data_handler($parser,"char"); //打开XML文件 $fp=fopen("test.xml","r"); //读取数据 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))); } //释放内存 xml_parser_free($parser); ?>
コースウェア