ホームページ php教程 php手册 PHP XML解析関数コードページ1/2

PHP XML解析関数コードページ1/2

Jun 13, 2016 pm 12:26 PM
php xml コード 関数 分析する 標準 コンピューター これ 初め

まず最初に、私はコンピューターの標準が大好きであることを認めなければなりません。もし誰もが業界の標準に従えば、インターネットはより良いメディアになるでしょう。標準化されたデータ交換フォーマットの使用により、オープンでプラットフォームに依存しないコンピューティング モデルが実現可能になります。それが私が XML 愛好家である理由です。
幸いなことに、私のお気に入りのスクリプト言語は XML をサポートするだけでなく、ますますサポートするようになっています。 PHP を使用すると、XML ドキュメントをインターネットにすばやく公開したり、XML ドキュメントに関する統計情報を収集したり、XML ドキュメントを他の形式に変換したりすることができます。たとえば、私は XML で書いた記事や書籍を管理するために、PHP の XML 処理機能をよく使用します。
この記事では、PHP の組み込み Expat パーサーを使用して XML ドキュメントを処理する方法について説明します。例を通して、Expat の処理方法を説明します。それまでの間、例では次の方法を
示します。
独自の処理関数を構築する
XML ドキュメントを独自の PHP データ構造に変換する
Expat を導入する
XML パーサー (XML プロセッサとも呼ばれる)これにより、プログラムは XML ドキュメントの構造とコンテンツにアクセスできるようになります。 Expat は、PHP スクリプト言語用の XML パーサーです。 Mozilla、Apache、Perl など、
他のプロジェクトでも使用されています。
イベントベースのパーサーとは何ですか?
2 つの基本タイプの XML パーサー:
ツリーベースのパーサー: XML ドキュメントをツリー構造に変換します。このタイプのパーサーは、結果のツリーの各要素にアクセスするための API を提供しながら、記事全体を解析します。一般的に使用される標準は DOM (Document Object Mode) です。
イベントベースのパーサー: XML ドキュメントを一連のイベントとして扱います。特別なイベントが発生すると、パーサーは開発者が提供する関数を呼び出してそれを処理します。
イベントベースのパーサーは、XML 文書のデータ中心のビューを備えています。これは、XML 文書の構造ではなく、データ部分に焦点を当てていることを意味します。これらのパーサーはドキュメントを最初から最後まで処理し、コールバック関数を通じて要素の開始、要素の終了、特徴データの開始などのイベントをアプリケーションに報告します。
以下は「Hello-World」の XML ドキュメントの例です。

Hello World

イベントベースのパーサーは 3 つのイベントとして報告します。 :
開始要素: 挨拶
CDATA 項目の開始、値: Hello World
終了要素: 挨拶
ツリーベースのパーサーとは異なり、イベントベースのパーサーは記述ドキュメント構造を生成しません。 CDATA アイテムでは、イベントベースのパーサーでは、親要素
グリーティングに関する情報を取得できません。
ただし、下位レベルのアクセスが提供されるため、リソースをより有効に活用し、アクセスを高速化できます。この方法では、ドキュメント全体をメモリ
に収める必要はありません。実際、ドキュメント全体が実際のメモリ値よりも大きくなる場合もあります。
Expat は、このようなイベントベースのパーサーです。もちろん、Expat を使用する場合は、必要に応じて PHP で完全なネイティブ ツリー構造を生成することもできます。
上記の Hello-World の例には、完全な XML 形式が含まれています。ただし、関連付けられた DTD (Document Type Definition) も埋め込まれた DTD も存在しないため、これは無効です。
Expat では、これに違いはありません。Expat は有効性をチェックしないパーサーであるため、ドキュメントに関連付けられた DTD を無視します。ただし、ドキュメントは完全な
形式である必要があることに注意してください。そうでないと、Expat (他の XML 準拠パーサーと同様) がエラー メッセージを表示して停止します。
有効性をチェックしないパーサーである Exapt は、その速度と軽量性により、インターネット プログラムに最適です。
Compile Expat
Expat は PHP3.0.6 バージョン (またはそれ以降) にコンパイルできます。 Apache 1.3.9 以降、Expat は Apache の一部として含まれています。 Unix システムでは、-with
-xml オプションを使用して PHP を構成することで、PHP にコンパイルできます。
PHP を Apache モジュールとしてコンパイルすると、デフォルトで Expat が Apache の一部として組み込まれます。 Windows では、XML ダイナミック リンク ライブラリをロードする必要があります。
XML の例: XMLstats
Expat の関数を理解する 1 つの方法は、例を通して見ることです。これから説明する例では、Expat を使用して XML ドキュメントの統計を収集します。
ドキュメント内の各要素について、次の情報が出力されます:
ドキュメント内で要素が使用された回数
要素内の文字データの量
その親要素element
要素の子要素 ​​
注: デモの目的で、PHP を使用して、要素の親要素と子要素を保存する構造を生成します。
準備
XML パーサーの生成に使用される関数インスタンスは xml_parser_create() です。このインスタンスは、今後のすべての関数に使用されます。この考え方は、PHP の MySQL 関数の
接続タグに非常に似ています。通常、イベントベースのパーサーでは、ドキュメントを解析する前に、特定のイベントが発生したときに呼び出されるコールバック関数を登録する必要があります。Expat には例外イベントはありません。
は次の 7 つのイベントを定義します:
オブジェクト XML 解析関数の説明
要素 xml_set_element_handler() 要素の始まりと終わり
文字データ xml_set_character_data_handler() の始まり文字データ 外部エンティティ XML_SET_EXTERNAL_ENTITY_REF_HANDLER () 外部エンティティの出現 ing_inStruction_handler () 処理命令の出現
メソッドの記憶 xml_set_notation_deCl_handler ()
デフォルトの xml_set_default_handler() の発生 ハンドラを指定しないその他のイベント
すべてのコールバック関数は、(他のパラメータに加えて) 最初のパラメータとしてパーサーのインスタンスを取得する必要があります。
この記事の最後にあるサンプル スクリプトについては。注意が必要なのは、要素処理関数と文字データ処理関数の両方を使用していることです。要素のコールバック ハンドラー関数は、
xml_set_element_handler() を通じて登録されます。
この関数は 3 つのパラメータを取ります:
パーサーのインスタンス
開始要素を処理するコールバック関数の名前
終了要素を処理するコールバック関数の名前
開始時XML ドキュメントを解析するコールバック関数が存在する必要があります。これらは、PHP マニュアルに記載されているプロトタイプと一致して定義する必要があります。
たとえば、Expat は開始要素のハンドラー関数に 3 つのパラメーターを渡します。スクリプト例では、次のように定義されています。
function start_element($parser, $name, $attrs)
最初のパラメータはパーサー識別子、2 番目のパラメータは開始要素の名前、 3 番目のパラメータは、要素のすべての属性と値を含む配列です。
XML ドキュメントの解析を開始すると、Expat は開始要素に遭遇するたびに start_element() 関数を呼び出してパラメータを渡します。
XML 大文字小文字折りオプション
大文字小文字折りオプションをオフにするには、xml_parser_set_option () 関数を使用します。このオプションはデフォルトでオンになっており、ハンドラー関数に渡される要素名は自動的に
大文字に変換されます。ただし、XML では大文字と小文字が区別されます (したがって、統計 XML ドキュメントでは大文字と小文字が非常に重要です)。この例では、ケース折りたたみオプションをオフにする必要があります。
ドキュメントを解析する
すべての準備作業が完了したら、スクリプトは最終的に XML ドキュメントを解析できるようになります。カスタム関数である
Xml_parse_from_file() は、パラメーターで指定されたファイルを開き、4kb サイズで実行します。
xml_parse() の解析は xml_parse_from_file() と同じです。エラーが発生した場合、つまり XML 文書の形式が不完全な場合は false が返されます。
xml_get_error_code() 関数を使用して、最後のエラーの数値コードを取得できます。この数値コードを xml_error_string() 関数に渡して、
エラー テキスト メッセージを取得します。
XML の現在の行番号を出力し、デバッグを容易にします。
解析プロセス中に、コールバック関数を呼び出します。
文書構造を説明する
文書を解析するときに、Expat が強調する必要がある問題は、「文書構造の基本的な記述をどのように維持するか?」ということです。
前に述べたように、イベントベースのパーサー自体は構造情報を生成しません。
ただし、タグ構造は XML の重要な機能です。たとえば、要素シーケンス は、<figure><title> とは異なる意味を持ちます。そうは言っても、著者 <br> なら誰でも、本のタイトルと絵のタイトルは、たとえどちらも「タイトル」という用語を使用しているとしても、互いに何の関係もないと言うでしょう。したがって、イベントベースのパーサーで XML <br> をより効率的に処理するには、独自のスタックまたはリストを使用してドキュメントの構造情報を維持する必要があります。 <br>ドキュメント構造をミラーリングするには、スクリプトは少なくとも現在の要素の親要素を知っている必要があります。 Exapt の API を使用してこれを実現することは不可能です。<br> コンテキスト情報なしで現在の要素のイベントのみを報告します。したがって、独自のスタック構造を構築する必要があります。 <br>スクリプトの例では、先入れ後出し (FILO) スタック構造を使用しています。配列を通じて、スタックはすべての開始要素を保存します。開始要素処理関数の場合、現在の要素は <br>array_push() 関数によってスタックの先頭にプッシュされます。同様に、終了要素処理関数は、array_pop() を通じて先頭要素を削除します。 <br>シーケンス <book><title> の場合、スタックは次のように埋められます:
開始要素 book: スタックの最初の要素に「book」を割り当てます。 ($ スタック[0])。
開始要素 title: スタックの先頭 ($stack[1]) に「title」を割り当てます。
要素タイトルの終了: スタック ($stack[1]) から最上位の要素を削除します。
要素タイトルの終了: スタック ($stack[0]) から最上位の要素を削除します。
PHP3.0 は、$ Depth 変数を通じて要素のネストを手動で制御することにより、この例を実装します。これにより、スクリプトがより複雑に見えます。 PHP4.0 は、array_pop() 関数と
array_push() 関数を使用して、スクリプトをより簡潔に見せます。
データの収集
各要素に関する情報を収集するには、スクリプトは各要素のイベントを記憶する必要があります。グローバル配列変数 $elements を使用して、ドキュメント内のすべてのさまざまな要素
を保存します。配列の項目は要素クラスのインスタンスであり、4 つのプロパティ (クラスの変数) があります。
$count - 要素がドキュメント内で見つかった回数
$chars - 文字のバイト数要素内のイベント
$parents - 親要素
$childs - 子要素
ご覧のとおり、クラス インスタンスを配列に保存するのは簡単です。
注: PHP の特徴は、対応する配列全体を走査するのと同じように、while(list() = each()) ループを通じてクラス構造全体を走査できることです。すべてのクラス変数
(および PHP3.0 を使用する場合はメソッド名) は文字列として出力されます。
要素が見つかったら、対応するカウンタをインクリメントして、ドキュメント内でその要素が何回出現したかを追跡する必要があります。対応する $elements 項目の count 要素も 1 つ増加します。
また、現在の要素がその子要素であることを親要素に知らせる必要があります。したがって、現在の要素の名前は、親要素の $childs 配列内の項目に追加されます。最後に、現在の
要素はその親が誰であるかを記憶する必要があります。したがって、親要素は、現在の要素の $parents 配列内の項目に追加されます。
統計情報の表示
残りのコードは、$elements 配列とそのサブ配列をループして、統計結果を表示します。これは最も単純なネストされたループですが、正しい結果が出力されますが、コードは単純でも特別なスキルも必要ありません。これは、作業を完了するために毎日使用できる単なるループです。
スクリプトの例は、PHP の CGI モードでコマンド ラインを通じて呼び出されるように設計されています。そのため、統計結果の出力形式はテキスト形式となります。スクリプトをインターネット
上で使用したい場合は、出力関数を変更して HTML 形式を生成する必要があります。
概要
Exapt は PHP 用の XML パーサーです。イベントベースのパーサーとして、文書の構造的な記述は生成されません。ただし、低レベルのアクセスを提供することにより、リソースの利用効率が向上し、アクセスが高速化されます。
有効性をチェックしないパーサーとして、Expat は XML ドキュメントに添付された DTD を無視しますが、ドキュメントが整形式でない場合はエラー メッセージを表示して停止します。
ドキュメントを処理するためのイベント処理関数を提供します。
スタックやツリーなどの独自のイベント構造を構築して、XML 構造化情報マークアップの利点を活用します。
新しい XML プログラムは毎日登場し、PHP の XML サポートは常に強化されています (たとえば、DOM ベースの XML パーサー LibXML のサポートが追加されました)。
PHP と Expat を使用すると、有効かつオープンでプラットフォームに依存しない今後の標準に備えることができます。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

今まで知らなかったことを後悔している 7 つの PHP 関数 今まで知らなかったことを後悔している 7 つの PHP 関数 Nov 13, 2024 am 09:42 AM

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

母音を文字列にカウントするPHPプログラム 母音を文字列にカウントするPHPプログラム Feb 07, 2025 pm 12:12 PM

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? Apr 03, 2025 am 12:03 AM

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。

See all articles