4

PHP で XML 構成ファイルを読み取るためのさまざまな方法をテストしています (おそらくサイズが大きく、読み取り頻度が非常に高い)。書き込みは一切必要ありません。1 つはSimpleXML (DOM パーサーであることがわかっています) を使用し、もう 1 つはXMLReaderを使用しています。

DOM リーダーはツリー全体を読み取る必要があるため、より多くのメモリを使用することはわかっています。私のテストはそれを反映しています。また、SAX パーサーは、次の内容をチェックせずにストリームから各ノードを読み取るため、メモリ使用量が少ない「イベントベース」のパーサーであることも知っています。

また、XMLReader は、現在のノードに関するデータを提供するカーソルを使用してストリームから読み取ります。したがって、XMLReader ( http://us2.php.net/xmlreader ) はDOM パーサーではないように思えますが、私の質問は、SAX パーサーですか、それとも何か他のものですか? XMLReader は SAX パーサーと同じように動作するように見えますが、イベント自体はスローしません (つまり、XMLReader で SAX パーサーを構築できますか?)

それ以外の場合、その分類に名前はありますか?

4

4 に答える 4

6

XMLReaderは、自身を「プル パーサー」と呼んでいます。

XMLReader 拡張機能は、XML プル パーサーです。リーダーは、ドキュメント ストリームを進み、途中の各ノードで停止するカーソルとして機能します。

後で、 libxmlを使用していると述べています。

Java XML プル解析に関するこのページは、興味深いものになる可能性があります。XMLReader がこのプロジェクトの目標と意図に関連している場合、あなたの質問に対する答えは「どちらでもない」カテゴリに分類されます。

于 2010-06-15T19:47:13.770 に答える
4

SAX パーサーは、SAX API を実装するパーサーです。つまり、特定のパーサーは、SAX API を使用してそれに対してコーディングできる場合にのみ、SAX パーサーです。DOM パーサーについても同様です。この分類は、API がどのように実装されているかではなく、純粋にサポートする API に関するものです。したがって、SAX パーサーは DOM パーサーでもあります。したがって、メモリの使用量やその他の特性について確信を持つことはできません。

ただし、本当の質問にたどり着くには、XMLReader の方が適しているように思われます。これはプル パーサーであるため、必要なデータを非常に具体的に要求するため、オーバーヘッドが少なくて済むはずだからです。

于 2010-06-15T19:51:03.540 に答える
1

XMLReaderSAX2パーサーが実装する必要のあるインターフェースです。したがって、SAXパーサーを介してアクセスすると、SAXパーサーがあると言えますXMLReaderXMLReaderこれがSAXパーサーです。

XMLReaderのjavadocを参照してください。

XMLReaderは、XMLパーサーのSAX2ドライバーが実装する必要のあるインターフェイスです。このインターフェイスを使用すると、アプリケーションでパーサーの機能とプロパティを設定および照会したり、ドキュメント処理用のイベントハンドラーを登録したり、ドキュメントの解析を開始したりできます。

この情報は次の理由で関連があると思います。

  • SAXの公式Webサイトからのものです
  • javadocがJava用であっても、SAXはJava言語で作成されました。
于 2011-10-31T05:07:28.380 に答える
1

要するに、どちらでもありません。

SAX パーサーは、ストリーム指向のイベント ベースのプッシュ パーサーです。startElement や endElement などのイベントを処理するコールバック関数を登録してから、parse() を呼び出して XML ドキュメント全体を一度に 1 ノードずつ処理します。私の知る限り、PHP には適切に管理された SAX パーサーがありません。ただし、非常によく似たExpatライブラリを使用するXMLParserがあります。

DOM パーサーでは、XML ドキュメント全体をメモリにロードする必要がありますが、XML ノードのオブジェクト指向ツリーを提供します。PHP の DOM パーサーの例には、SimpleXMLDOMが含まれます。

PHP XMLReaderは、これらのどちらでもありません。これはストリーム指向の「プル パーサー」であり、大きなループを作成し、read() 関数を呼び出してカーソルを前方に移動し、一度に 1 つのノードを処理する必要があります。

XMLParser および XMLReader と SimpleXML および DOM の大きな利点は、ストリーム指向のパーサーがメモリ効率が高く、現在のノードのみをメモリにロードすることです。一方、SimpleXML と DOM は簡単に使用できますが、XML ドキュメント全体をメモリにロードする必要があり、これは非常に大きな XML ドキュメントには適していません。

于 2013-02-12T01:22:16.713 に答える