LINQ to XML とその他の XML テクノロジ
更新 : November 2007
ここでは、LINQ to XML を他の XML テクノロジ (XmlReader、XSLT、MSXML、および XmlLite) と比較します。使用するテクノロジを決定するときに、ここで説明する情報を参照してください。
LINQ to XML とドキュメント オブジェクト モデル (DOM) の比較については、「LINQ to XML と DOM」を参照してください。
LINQ to XML と XmlReader
XmlReader は、高速、前方参照専用、非キャッシュのパーサーです。
LINQ to XML は XmlReader の上位に実装され、緊密に統合されています。ただし、XmlReader は単独で使用することもできます。
たとえば、1 秒間に何百もの XML ドキュメントを解析する Web サービスを構築する際に、これらのドキュメントの構造が同じであるため、XML を解析するために実装するコードの作成が 1 つだけで済む場合は、XmlReader を単独で使用することが考えられます。
一方、多数の小さい XML ドキュメントを解析するシステムを構築する際に、ドキュメントがそれぞれ異なる場合は、生産性の向上という観点から LINQ to XML を使用します。
LINQ to XML と XSLT
LINQ to XML と XSLT は、どちらも広範な XML ドキュメント変換機能を備えています。XSLT は、ルール ベースの宣言型の方法です。高度な XSLT プログラミングでは、ステートレスな方法が重視される関数型のプログラミング スタイルで XSLT を記述します。変換は、副作用なしで実装される純粋関数を使用して記述できます。このルール ベース (関数型) の方法に精通している開発者は多くありません。また、修得するのは難しく、相当の学習時間を要する場合があります。
XSLT は、パフォーマンスの高いアプリケーションを生成する、生産性の高いシステムとして利用できます。たとえば、Web 関連の大企業の中には、さまざまなデータ ソースを基に取得した XML から HTML を生成するための手段として XSLT を使用している企業もあります。XSLT を CLR コードにコンパイルするマネージ XSLT エンジンは、一部のシナリオではネイティブ XSLT エンジンより高いパフォーマンスを発揮します。
ただし、XSLT では、多くの開発者が持っている C# や Visual Basic の知識は活かされません。開発者は、別の複雑なプログラミング言語でコードを記述する必要があります。C# (または Visual Basic) と XSLT など、統合されていない 2 つの開発システムを使用すると、ソフトウェア システムの開発や保守が困難になります。
LINQ to XML の変換は、LINQ to XML のクエリ式を修得すれば、使いやすいテクノロジとして威力を発揮します。基本的には、関数型構築を使用して、さまざまなソースからデータを取り込んで XElement オブジェクトを動的に構築し、全体をまとめて新しい XML ツリーを作成することによって XML ドキュメントを作成します。変換では、まったく新しいドキュメントを生成できます。LINQ to XML を使用すると、変換を比較的簡単かつ直感的に構築でき、結果のコードも読みやすいものになります。このため、開発と保守のコストを削減できます。
LINQ to XML は、XSLT に置き換わることを目的としていません。複雑なドキュメント中心の XML 変換 (特に、ドキュメントの構造が明確に定義されていない場合) では、引き続き XSLT が最適なツールになります。
XSLT には、W3C (World Wide Web Consortium) 標準という利点があります。標準となっている技術を使用するだけで十分な場合は、XSLT の方が適切といえます。
XSLT は XML であるため、プログラムで操作できます。
LINQ to XML と MSXML
MSXML は、Microsoft Windows が備えている、XML 処理のための COM ベース テクノロジです。MSXML は DOM をネイティブで実装し、XPath と XSLT をサポートしています。MSXML には、非キャッシュの SAX2 イベントベース パーサーも含まれています。
MSXML はパフォーマンスが高く、セキュリティもほとんどのシナリオで既定で確保されます。また、Internet Explorer でアクセスできるため、AJAX スタイルのアプリケーションでクライアント側での XML の処理を実行できます。MSXML は、C++、JavaScript、Visual Basic 6.0 など、COM をサポートするすべてのプログラミング言語から使用できます。
ただし共通言語ランタイム (CLR) に基づくマネージ コードで使用することは推奨されません。
LINQ to XML と XmlLite
XmlLite は、非キャッシュ、前方参照専用のプル パーサーで、主に C++ で使用されます。マネージ コードで使用することは推奨されません。
XmlLite の最大の利点は、ほとんどのシナリオで、軽量かつ高速で安全な XML パーサーとして利用できることです。XmlLite は脅威の対象となる要素がほとんどないため、信頼されていないドキュメントを解析し、サービス拒否攻撃やデータ漏洩攻撃などからの保護が必要な場合は、優れた方法となります。
XmlLite は、統合言語クエリ (LINQ: Language-Integrated Query) と統合されていません。LINQ の利用動機となるプログラミングの生産性の向上はもたらされません。