XmlReader と SAX リーダーの比較
更新 : November 2007
SAX (Simple API for XML) リーダーと同様に、XmlReader は前方参照専用、読み取り専用のカーソルです。XmlReader は、入力に対する高速で非キャッシュのストリーム アクセスを提供します。XmlReader では、ストリームまたはドキュメントを読み取ることができます。このリーダーを使用すれば、ユーザーはデータを取り出し、アプリケーションに関係のないレコードをスキップできます。XmlReader と SAX リーダーの大きな違いは、SAX モデルが "プッシュ" モデルであることです。XmlReader を使用するアプリケーションは、リーダーから意のままにデータを取り出せるのに対して、SAX リーダーでは、パーサーがアプリケーションにイベントをプッシュし、新しいノードが読み取られるたびにアプリケーションに通知します。プル モデルの利点を次の表に示します。
利点 |
説明 |
---|---|
状態管理 |
プッシュ モデルは、非常に複雑な状態機構を構築するためにコンテンツ ハンドラを必要とします。プル モデルのクライアントでは、自然なトップダウン型の洗練された手続きによって状態管理が簡単になります。 |
複数の入力ストリーム |
プル モデルでは、クライアントが複数のストリームを 1 つにまとめることができます。これをプッシュ モデルで行おうとすると、非常に複雑になります。 |
層の生成 |
プッシュ モデルはプル モデルの最上位に構築できます。逆はできません。 |
余分な文字列コピーの回避 |
通常、データはパーサーのバッファから文字列オブジェクトに読み取られ、次に文字列オブジェクトがクライアントのバッファにプッシュされます。プル モデルでは、文字列が直接書き込まれるバッファをクライアントからパーサーに渡すことができます。 |
選択的な処理 |
プッシュ モデルでは、属性、処理命令、空白を含むすべての項目がクライアントに通知されるのに対し、プル モデルのクライアントでは、項目をスキップし、アプリケーションに関係のある項目だけを処理できます。このため、プル モデルでは、きわめて効率的なアプリケーションを作成できます。また、XML ストリームの処理方法に影響を及ぼすプロパティ (たとえば正規化) を事前に設定できます。 |