ホームページ  >  記事  >  php教程  >  PHP による XML アプリケーション (1)

PHP による XML アプリケーション (1)

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

xml

概要
XMLとは、Extensible Markup Language(eXtensible Markup Languageの略で、拡張可能なマークアップ言語を意味します)の略です。 XML は、ドキュメントを部分に分割し、それらの部分を識別するセマンティック マークアップを定義する一連のルールです。これはメタ マークアップ言語でもあります。つまり、他のドメイン固有のセマンティックおよび構造化マークアップ言語を定義するための構文言語を定義します。 XML は現在最も注目されているテクノロジーです。 PHP には XML 文書を解析する機能もあります。以下では、PHP における XML の応用について説明します。 XML の概要





TEXT


< ;/body>


上記のコードは、構造的には XML の規則に準拠しており、同じ要素を参照する場合は、次のように解釈できます。
などの一貫した大文字化は、規則
2 に準拠しません。すべての属性値 (href="????" など) は、< のように "" で囲む必要があります。 ;a href=www.yahoo.com> は間違っています
3. すべての要素は、 の形式である必要があります。空の要素、末尾の「/>」が「/」がない場合、それは間違ったコードです
​​4。ループと同様に、すべての要素を相互にネストする必要があります。プログラムを作成する場合、すべての要素はルート要素にネストする必要があります。たとえば、上記のコードのすべてのコンテンツは にネストされます。
5. 要素名 (つまり、上記の body a p img など) は文字で始まる必要があります。

PHP の XML パーサー Expat を使用するにはどうすればよいですか?
Expat は、PHP スクリプト言語用の XML パーサー (XML プロセッサとも呼ばれる) であり、プログラムが XML ドキュメントの構造とコンテンツにアクセスできるようにします。イベントベースのパーサーです。 XML パーサーには 2 つの基本的なタイプがあります:

ツリーベースのパーサー: XML ドキュメントをツリー構造に変換します。このタイプのパーサーは、結果のツリーの各要素にアクセスするための API を提供しながら、記事全体を解析します。その共通規格は DOM (Document Object Mode) です。

イベントベースのパーサー: XML ドキュメントを一連のイベントとして扱います。特別なイベントが発生すると、パーサーは開発者が提供する関数を呼び出してそれを処理します。イベントベースのパーサーは、XML 文書のデータ中心のビューを備えています。これは、XML 文書の構造ではなく、データ部分に焦点を当てていることを意味します。これらのパーサーはドキュメントを最初から最後まで処理し、コールバック関数を通じて要素の開始、要素の終了、特徴データの開始などのイベントをアプリケーションに報告します。

以下は「Hello-World」XML ドキュメントの例です:


Hello World


イベントベースのパーサーは 3 つのイベントとして報告します。  開始要素: 挨拶
CDATA 項目の始まり、値は次のとおりです: Hello World
終了要素: 挨拶

もちろん、イベントベースのパーサーは、ドキュメントを記述する構造を生成しません。 Expat を使用します。必要に応じて、完全なネイティブ ツリー構造を生成します。 CDATA アイテムでは、イベントベースのパーサーは親要素の挨拶情報を取得しません。ただし、下位レベルのアクセスが提供されるため、リソースをより有効に活用し、アクセスを高速化できます。この方法では、ドキュメント全体をメモリに収める必要がなく、実際にはドキュメント全体が実際のメモリ値よりも大きくなる場合もあります。

上記の Hello-World の例には完全な XML 形式が含まれていますが、関連付けられた DTD (Document Type Definition) も埋め込まれた DTD も存在しないため、無効です。ただし、Expat は有効性をチェックしないパーサーであるため、ドキュメントに関連付けられた DTD はすべて無視されます。ドキュメントはまだ完全に形成されている必要があることに注意してください。そうしないと、Expat (他の XML 準拠パーサーと同様) がエラー メッセージを表示して停止します。

Compile Expat
Expat は PHP3.0.6 バージョン (またはそれ以降) にコンパイルできます。 Apache 1.3.22 以降、Expat は Apache の一部として含まれています。 Unix システムでは、-with-xml オプションを使用して構成することで、PHP にコンパイルできます。

PHP が Apache モジュールとしてコンパイルされている場合、Expat はデフォルトで Apache の一部になります。 Windows では、XML ダイナミック リンク ライブラリをロードする必要があります。

XML の例: XMLstats
これから説明する例では、Expat を使用して XML ドキュメントの統計を収集します。

文書内の各要素について、以下の情報が出力されます:

文書内でその要素が使用されている回数
要素内の文字データの数
その要素の親要素
その子要素要素

注: デモの目的で、PHP を使用して要素の親要素と子要素を保存する構造を生成します。XML パーサー インスタンスの生成に使用される関数は何ですか?
XMLパーサーインスタンスの生成に使用する関数はxml_parser_create()です。このインスタンスは、今後のすべての関数に使用されます。この考え方は、PHP の MySQL 関数の接続タグに非常に似ています。イベントベースのパーサーでは通常、ドキュメントを解析する前に、特定のイベントが発生したときに呼び出されるコールバック関数の登録が必要です。 Expat には次の 7 つの例外イベントが定義されています:

オブジェクト XML 解析関数の説明
要素 xml_set_element_handler() 要素の始まりと終わり
文字データ xml_set_character_data_handler() 文字データの始まり
外部エンティティ xml_set_external_entity_ref_handler()外部エンティティの出現
未解析の外部エンティティ xml_set_unparsed_entity_decl_handler() 未解決の外部エンティティの発生
処理命令の発生 xml_set_processing_instruction_handler() 処理命令の発生
表記法宣言の発生 xml_set_notation_decl_handler() 表記法宣言の発生
デフォルト xml_set_default _ハンドラー() ハンドラー関数を指定しないその他のイベント

すべてのコールバック関数は、(他のパラメーターに加えて) 最初のパラメーターとしてパーサーのインスタンスを取る必要があります。

この記事の最後にあるサンプルスクリプトでは、要素処理関数と文字データ処理関数の両方を使用していることに注意してください。要素のコールバック ハンドラー関数は、xml_set_element_handler() を通じて登録されます。

この関数には 3 つのパラメータが必要です:

パーサーのインスタンス
開始要素を処理するコールバック関数の名前
終了要素を処理するコールバック関数の名前
解析を開始するときにコールバック関数が存在する必要がありますXML ドキュメント。これらは、PHP マニュアルに記載されているプロトタイプと一致して定義する必要があります。

たとえば、Expat は開始要素のハンドラー関数に 3 つのパラメーターを渡します。スクリプト例では、次のように定義されています:

function start_element($parser, $name, $attrs)

$parser はパーサーフラグ、$name は開始要素の名前、$ attrs は、プロパティと値の配列です。

XML ドキュメントの解析を開始すると、Expat は開始要素に遭遇するたびに start_element() 関数を呼び出し、パラメータを渡します。

XML 大文字小文字折りオプション
大文字小文字折りオプションをオフにするには、xml_parser_set_option() 関数を使用します。このオプションはデフォルトでオンになっており、ハンドラー関数に渡される要素名が自動的に大文字に変換されます。ただし、XML では大文字と小文字が区別されます (したがって、統計 XML ドキュメントでは大文字と小文字が非常に重要です)。この例では、ケース折りたたみオプションをオフにする必要があります。

<続く>





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