ホームページ  >  記事  >  php教程  >  PHPのXMLスキーマの詳しい説明

PHPのXMLスキーマの詳しい説明

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

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はCとC++のGnomeプロジェクトのlibxml(標準化は近づいています)にあります)図書館の上。実際、xml(標準化が近づいています)Readerは、薄いphp(現在の主流の開発言語として)レイヤーにすぎません。 xml(標準化が近づいている)TextReader自体は.NETのxml(標準化が近づいている)TextReaderクラスとxml(標準化が近づいている)Readerクラスを模倣していますが、これらのクラスに似たコードはありません。 xml(標準化が近づいている)(SAX)のSimple APIとは異なり、xml

(標準化が近づいている)

Readerはプルパーサーではなくプッシュパーサーです。これは、プログラムを制御できることを意味します。パーサーに文書を見た後に何を見たかを伝えるのではなく、次の文書フラグメントをいつ取得するかをパーサーに指示します。コンテンツに反応するのではなく、コンテンツをリクエストすることになります。この問題を別の角度から考えてみましょう: xml(標準化が近づいています)Reader は Iterator 設計パターンの実装であり、Observer 設計パターンの実装ではありません。 質問例

簡単な例から始めましょう。 xml(標準化が近づいています)-RPC リクエストを受け取り、レスポンスを生成するための php

(現在の主流の開発言語として)

スクリプトを作成しているとします。より具体的に言うと、リクエストがリスト 1 のようになっていると仮定します。ドキュメントのルート要素は、methodCall で、methodName 要素と params 要素が含まれます。メソッドの名前は sqrt です。params 要素には param 要素が含まれており、param 要素には double が含まれており、double の平方根が目的の値です。名前空間は使用されません。 リスト 1. 作業:

1. メソッド名を確認し、それが sqrt (スクリプトが処理方法を知っている唯一のメソッド) でない場合は、エラー応答を生成します。

2. パラメータを検索します。パラメータが存在しない場合、またはパラメータの型が間違っている場合は、エラー応答が生成されます。 3.さらに平方根を計算します。

4. リスト 2 に示すように、結果をフォームで返します。

リスト2。 パーサーを初期化してドキュメントをロードします
最初のステップは、新しいパーサー オブジェクトを作成することです。作成操作は簡単です:

<b>以下是引用片段:<br></b><?xml<font class=reblank>(标准化越来越近了)</font> version="1.0"?> <br><methodCall> <br>  <methodName>sqrt</methodName> <br>  <params> <br>    <param> <br>      <value><double>36.0</double></value> <br>    </param> <br>  </params> <br></methodCall>

次に、解析用のデータを提供する必要があります。 xml

(標準化が近づいています)

-RPC の場合、これはハイパーテキスト転送プロトコル (HTTP) リクエストの生の本体です。この文字列はリーダーの XML に渡すことができます

(標準化が近づいています)

() function: 生の送信データを入力します

<b>以下是引用片段:<br></b><?xml<font class=reblank>(标准化越来越近了)</font> version="1.0"?> <br><methodResponse> <br>  <params> <br>    <param> <br>      <value><double>6.0</double></value> <br>    </param> <br>  </params> <br></methodResponse>

  如果发现 $HTTP_RAW_POST_DATA 是空的,则将以下代码行添加到 php(做为现在的主流开发语言).ini 文件:

<b>以下是引用片段:<br></b>  always_populate_raw_post_data = On

  可以解析任何字符串,无论它是从何处获取的。例如,可以是程序中的一串文字或从本地文件读取。还可以使用 open() 函数从外部 URL 载入数据。例如,下面的语句准备解析其中一个 Atom 提要:

<b>以下是引用片段:<br></b>  $reader->xml<font class="reblank">(标准化越来越近了)</font>('http://www.cafeaulait.org/today.atom');

  无论是从何处获取原始数据,现在已建立了阅读器并为解析做好准备。

  读取文档

  read() 函数使解析器前进到下一个标记。最简单的方法是在 while 循环中遍历整个文档:

<b>以下是引用片段:<br></b>  while ($reader->read()) { <br>  // processing code goes here... <br>  }

  完成遍历后,关闭解析器以释放它所持有的任何资源,并且重置解析器以便用于下一个文档:

<b>以下是引用片段:<br></b>  $reader->close();

  在循环内部,将解析器放置在特殊节点上:元素的起点、元素的终点、文本节点、注释等等。通过检查以下属性,可以发现解析器正在查看的内容:

  localName 是本地的、未带前缀的节点名。

  name 是可能的节点前缀名。对于像注释这种没有名称的节点,包括 #comment、#text、#document 等等,与 DOM 中的一样。

  namespaceURI 是节点名称空间的统一资源标识符(Uniform Resource Identifier,URI)。

  nodeType 是代表节点类型的整数 —— 例如,2 代表属性节点,7 代表处理指令。

  prefix 是节点的名称空间前缀。

  value 是节点的下一个文本内容。

  如果节点有文本值,hasValue 值为 true;否则,值为 false.

 



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