私の経験では、既存の xml 要素の再配置と選択を主に扱う場合は、XSLT の方が簡潔で読みやすいです。XPath は短くて理解しやすく、xml 構文により、コードにXElement
andXAttribute
ステートメントが散らばることがありません。XSLT は xml-tree変換言語としてうまく機能します。
ただし、文字列の処理が貧弱で、ループが直感的ではなく、サブルーチンの意味のある概念がありません。別の変換の出力を変換することはできません。
そのため、実際に要素と属性のコンテンツをいじりたい場合は、すぐに不十分になります。ちなみに、構造を正規化するための XSLT (たとえば、すべてのtable
要素に要素があることを確認するためtbody
) と、それを解釈するための linq-to-xml の両方を使用しても問題はありません。優先順位付けされた条件付き一致の可能性は、多くの類似しているが異なる一致を処理する場合に XSLT が使いやすいことを意味します。Xslt はドキュメントの簡素化には優れていますが、基本的な機能が不足しているため、それだけでは十分ではありません。
Linq-to-Xml の時流に心から飛び乗ったので、一見しただけでは XSLT との重複が少ないと言えます。(そして、.NET 用の XSLT 2.0/XQuery 1.0 の実装をぜひとも見てみたいと思います)。
パフォーマンスに関しては、両方の技術がスピーディーです。実際、遅い操作を表現するのは非常に難しいため、XSLT で誤って遅いケースをトリガーすることはほとんどありません (再帰をいじり始めない限り...)。対照的に、LINQ to Xml の能力によっても速度が低下する可能性があります。内部ループで重い .NET オブジェクトを使用するだけで、パフォーマンスの問題が発生する可能性があります。
何をするにしても、XSLT を使用して最も単純なロジック以外を実行しようとしないでください。XSLT は、同等の C# よりもはるかに冗長で、はるかに読みにくいものです。大量のロジックが必要で ( date > DateTime.Now ? "will be" : "has"
XSLT で膨大なハックになるような単純なものでも)、XSLT と Linq to Xml の両方を使用したくない場合は、Linq を使用してください。