ホームページ  >  記事  >  バックエンド開発  >  PHP での XML アプリケーション_PHP チュートリアル

PHP での XML アプリケーション_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 17:39:56808ブラウズ

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

XMLの概要
XML (eXtended Markup Language:拡張マークアップ言語)について話すときは、まずHTMLコードの一部を見てみましょう:

XML
<p><center><font color="red">TEXT</font></center></p>
<a href="www.domain.com"><img src="logo. jpg"/>< /a>
</body>
</html>
上記のコードは、構造的には XML の規則に準拠しています。 XML は、データを含むツリー状の構造型として理解できます。
1.規則に準拠していない
など、一貫した大文字を使用します。 2. 属性値 (href="????" など) は、次のように "" で囲む必要があります。 as は誤りです
3. すべての要素は開始タグと終了タグで構成されている必要があります。要素は または空要素 PHP での XML アプリケーション_PHP チュートリアル​​ 4. プログラムを書くときのループと同じように、すべての要素は相互にネストされている必要があり、すべての要素はルート要素内にネストされている必要があります、上記のコードのすべてのコンテンツなど、すべてが にネストされています。
5. 要素名(つまり、body a p img 上記など)は文字で始まる必要があります。


PHPのXMLパーサーExpatの使い方は? Expat は、PHP スクリプト言語の XML パーサー (XML プロセッサーとも呼ばれる) であり、プログラムが XML ドキュメントの構造とコンテンツにアクセスできるようにします。イベントベースのパーサーです。 XML パーサーには 2 つの基本的なタイプがあります。 ツリーベースのパーサー: XML ドキュメントをツリー構造に変換します。このタイプのパーサーは、結果のツリーの各要素にアクセスするための API を提供しながら、記事全体を解析します。その共通規格は DOM (Document Object Model) です。
イベントベースのパーサー: XML ドキュメントを一連のイベントとして扱います。特別なイベントが発生すると、パーサーは開発者が提供する関数を呼び出してそれを処理します。イベントベースのパーサーは、XML 文書のデータ中心のビューを備えています。これは、XML 文書の構造ではなくデータ部分に焦点を当てていることを意味します。これらのパーサーはドキュメントを最初から最後まで処理し、コールバック関数を通じて要素の開始、要素の終了、特徴データの開始などのイベントをアプリケーションに報告します。
以下は「Hello-World」の XML ドキュメントの例です:

Hello World

イベントベースのパーサーは 3 つのイベントとして報告します:
開始要素:greeting
CDATA の開始item、値は:Hello World
終了要素:greeting
イベントベースのパーサーはドキュメントを記述する構造を生成しません。 もちろん、Expat を使用する場合は、必要に応じて PHP で完全なネイティブ ツリー構造を生成することもできます。 。 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 にコンパイルできます。 PHP が Apache モジュールとしてコンパイルされている場合、Expat はデフォルトで Apache の一部になります。 Windows では、XML ダイナミック リンク ライブラリをロードする必要があります。
XML の例: XMLstats
これから説明する例は、Expat を使用して XML ドキュメントの統計を収集することです。
文書内の各要素について、以下の情報が出力されます。
* 文書内でその要素が使用されている回数
* 要素内の文字データの数
* 要素の親要素
* 子要素の要素
注: デモでは、PHP を使用して要素の親要素と子要素を保存する構造体を生成します

XML パーサー インスタンスの生成に使用される関数は何ですか?
XMLパーサーインスタンスの生成に使用される関数はxml_parser_create()です。このインスタンスは、今後のすべての関数に使用されます。この考え方は、PHP の MySQL 関数の接続タグに非常に似ています。イベントベースのパーサーでは通常、ドキュメントを解析する前に、特定のイベントが発生したときに呼び出されるコールバック関数の登録が必要です。 Expat has no exception events. It defines the following seven possible events:

Object                                                         ’ xml_set_character_data_handler() The beginning of character data External entity xml_set_external_entity_ref_handler() External Entity occurrence
Unparsed external entity xml_set_unparsed_entity_decl_handler() Unparsed external entity occurrence
Processing instruction
Default xml_set_default_handler() ハンドラーを指定しないその他のイベント

すべてのコールバック関数は、(他のパラメーターに加えて) 最初のパラメーターとしてパーサーのインスタンスを取る必要があります。
この記事の最後にあるサンプル スクリプトでは、要素処理関数と文字データ処理関数の両方を使用していることに注意してください。要素のコールバック ハンドラー関数は、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 ドキュメントでは大文字と小文字が非常に重要です)。この例では、ケース折りたたみオプションをオフにする必要があります。
ドキュメントを解析する方法は?

すべての準備が完了したら、スクリプトはいよいよ XML ドキュメントを解析できるようになります: Parse
xml_parse() は、xml_parse_from_file() と同様に、エラーが発生した場合、つまり次の場合に false を返します。 XML ドキュメントの形式が不完全です。 xml_get_error_code() 関数を使用して、最後のエラーの数値コードを取得できます。この数値コードを xml_error_string() 関数に渡して、エラー テキスト メッセージを取得します。 XML の現在の行番号を出力し、デバッグを容易にします。 文書を解析するときに、Expat にとって強調する必要がある問題は、文書構造の基本的な記述をどのように維持するかということです。
前述したように、イベントベースのパーサー自体は構造情報を生成しません。ただし、タグ構造は XML の重要な機能です。たとえば、要素シーケンス は、<figure><title> とは異なる意味を持ちます。本のタイトルと写真のタイトルは、どちらも「タイトル」という用語を使用していますが、関連性はありません。したがって、イベントベースのパーサーを使用して XML をより効率的に処理するには、独自のスタックまたはリストを使用してドキュメントの構造情報を維持する必要があります。<br>ドキュメント構造のミラーを作成するには、スクリプトは少なくとも現在の要素の親要素を知っている必要があります。これは、Exapt の API では不可能であり、コンテキスト情報なしで現在の要素のイベントのみを報告します。したがって、独自のスタック構造を構築する必要があります。 <br> スクリプト例では先入れ後出し(FILO)スタック構造を使用しています。配列を通じて、スタックはすべての開始要素を保存します。開始要素処理関数の場合、現在の要素は array_push() 関数によってスタックの先頭にプッシュされます。同様に、終了要素処理関数は、array_pop() を通じて先頭要素を削除します。 <br> シーケンス<book><title>の場合、スタックは次のように埋められます:
開始要素 book: スタックの最初の要素($stack[0])に「book」を割り当てます。
開始要素title:スタックの先頭($stack[1])に「title」を代入します。
要素タイトル終了: スタック($stack[1])から最上位の要素を削除します。
要素タイトルの終了: スタックから最後の要素を削除します

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/486244.html技術記事概要 XMLとは、Extensible Markup Language(eXtensible Markup Languageの略で、拡張可能なマークアップ言語を意味します)の略です。 XML は、文書化するセマンティック マークアップを定義する一連のルールです...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。