この記事では、LINQ to XML と、 XmlReader、XSLT、MSXML、XmlLite の各 XML テクノロジを比較します。 この情報は、使用するテクノロジを決定するのに役立ちます。
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 エンジンは、XSLT を共通言語ランタイム (CLR) コードにコンパイルし、ネイティブ 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 を置き換えることを意図していません。 XSLT は、特にドキュメントの構造が明確に定義されていない場合に、複雑でドキュメント中心の XML 変換に最適なツールです。
XSLT には、World Wide Web Consortium (W3C) 標準であるという利点があります。 標準のテクノロジのみを使用する必要がある場合は、XSLT の方が適している可能性があります。
XSLT は XML であるため、プログラムで操作できます。
LINQ to XML と MSXML
MSXML は、Microsoft Windows に含まれる XML を処理するための COM ベースのテクノロジです。 MSXML は、XPath と XSLT をサポートする DOM のネイティブ実装を提供します。 また、SAX2 非キャッシュのイベント ベースのパーサーも含まれています。
MSXML は優れたパフォーマンスを発揮し、ほとんどのシナリオでは既定でセキュリティで保護されており、AJAX スタイルのアプリケーションでクライアント側の XML 処理を実行するためにブラウザーでアクセスできます。 MSXML は、C++、JavaScript、Visual Basic 6.0 など、COM をサポートする任意のプログラミング言語から使用できます。
CLR に基づくマネージド コードでの使用には、MSXML は推奨されません。
LINQ to XML と XmlLite
XmlLite は、非キャッシュ、転送のみ、プル パーサーです。 開発者は主に C++ で XmlLite を使用します。 開発者がマネージド コードで XmlLite を使用することはお勧めしません。
XmlLite の主な利点は、軽量で高速な XML パーサーであり、ほとんどのシナリオでセキュリティで保護されていることです。 その脅威の領域は小さいです。 信頼されていないドキュメントを解析する必要があり、サービス拒否やデータの公開などの攻撃から保護する必要がある場合は、XmlLite を使用することをお勧めします。
XmlLite は、Language-Integrated クエリ (LINQ) と統合されていません。 LINQ の背後にある動機付け力であるプログラマの生産性の向上は得られません。
こちらも参照ください
.NET