ホームページ >バックエンド開発 >PHPチュートリアル >PHP_PHP チュートリアルの XML プル モードの詳細な説明
XML(標準化が近づいている)の研究Readerライブラリはphp(現在の主流の開発言語として)5にバンドルされており、php(現在の主流の開発言語として)ページをxmlの処理を可能にします。標準化が近づいています) ドキュメントは効率的なストリーミング モードで作成されます。
php(現在の主流の開発言語として) 5では、新しいクラスxmlが導入されました(標準化が近づいています)Reader、Extensible Markup Languageを読むために使用されます(Extensible Markup Language、xml(標準化が近づいています) ))。 Simplexml(標準化が近づいています)やドキュメント オブジェクト モデル (DOM) とは異なり、xml(標準化は近づいています)Reader はストリーミング モードで動作します。つまり、ドキュメントを最初から最後まで読み取ります。ドキュメントの後ろにあるコンテンツがコンパイルされる前に、コンパイルされたドキュメントの前にあるコンテンツを最初に処理することができるため、非常に高速、非常に効率的、そして非常に経済的なメモリの使用が実現されます。処理する必要があるドキュメントが大きくなるほど、この機能はより重要になります。
libxml(標準化が近づいています)
ここで言及されている xml(標準化は近づいています)Reader API は、Gnome プロジェクトの C および C++ 用の libxml(標準化が近づいています) ライブラリの上にあります。実際、xml(標準化が近づいています)Readerは、薄いphp(現在の主流の開発言語として)レイヤーにすぎません。 xml(標準化が近づいている)TextReader自体は.NETのxml(標準化が近づいている)TextReaderクラスとxml(標準化が近づいている)Readerクラスを模倣していますが、これらのクラスに似たコードはありません。 xml(標準化が近づいている)(標準化が近づいている)のSimple APIとは異なります
(SAX)、xml(標準化が近づいています)Readerはプルパーサーではなくプッシュパーサーです。これは、プログラムを制御できることを意味します。パーサーに文書を見た後に何を見たかを伝えるのではなく、次の文書フラグメントをいつ取得するかをパーサーに指示します。コンテンツに反応するのではなく、コンテンツをリクエストすることになります。この問題を別の角度から考えてみましょう: xml(標準化が近づいています)Reader は Iterator 設計パターンの実装であり、Observer 設計パターンの実装ではありません。 質問例
簡単な例から議論を始めます。 xml(標準化が近づいています)
-RPC リクエストを受け取り、レスポンスを生成するための php(現在の主流の開発言語として) スクリプトを作成しているとします。より具体的に言うと、リクエストがリスト 1 のようになっていると仮定します。ドキュメントのルート要素は、methodCall で、methodName 要素と params 要素が含まれます。メソッドの名前は sqrt です。params 要素には param 要素が含まれており、param 要素には double が含まれており、double の平方根が目的の値になります。名前空間は使用されません。 リスト1.xml
(標準化が近づいています)-RPCリクエスト
りー
1. メソッド名を確認し、それが sqrt (スクリプトが処理方法を知っている唯一のメソッド) でない場合は、エラー応答を生成します。
2. パラメータを検索します。パラメータが存在しない場合、またはパラメータの型が間違っている場合は、エラー応答が生成されます。3.さらに平方根を計算します。
4. リスト 2 に示すように、結果をフォームで返します。
リスト2.xml
(標準化が近づいています)-RPC応答
りー
最初のステップは、新しいパーサー オブジェクトを作成することです。作成は簡単です:
りー
(標準化が近づいています)() 関数に渡すことができます: オリジナルの送信データを記入してください
りー
如果发现 $HTTP_RAW_POST_DATA 是空的,则将以下代码行添加到 php(做为现在的主流开发语言).ini 文件:
可以解析任何字符串,无论它是从何处获取的。例如,可以是程序中的一串文字或从本地文件读取。还可以使用 open() 函数从外部 URL 载入数据。例如,下面的语句准备解析其中一个 Atom 提要:
无论是从何处获取原始数据,现在已建立了阅读器并为解析做好准备。 读取文档 read() 函数使解析器前进到下一个标记。最简单的方法是在 while 循环中遍历整个文档:
完成遍历后,关闭解析器以释放它所持有的任何资源,并且重置解析器以便用于下一个文档:
在循环内部,将解析器放置在特殊节点上:元素的起点、元素的终点、文本节点、注释等等。通过检查以下属性,可以发现解析器正在查看的内容: localName 是本地的、未带前缀的节点名。 name 是可能的节点前缀名。对于像注释这种没有名称的节点,包括 #comment、#text、#document 等等,与 DOM 中的一样。 namespaceURI 是节点名称空间的统一资源标识符(Uniform Resource Identifier,URI)。 nodeType 是代表节点类型的整数 —— 例如,2 代表属性节点,7 代表处理指令。 prefix 是节点的名称空间前缀。 value 是节点的下一个文本内容。 如果节点有文本值,hasValue 值为 true;否则,值为 false.
|