9

C# での HTML 解析に XSLT または Linq to XML を使用する利点は何ですか? これは、html がクリーンアップされているため、有効な xhtml であることを前提としています。これらの値は最終的に ac# オブジェクトに入り、検証および処理されます。

これらが有効かどうか、また他に考慮すべき点があるかどうかをお知らせください。

XSLT の利点:

  • 迅速な変更と導入が容易
  • かなり有名

XSLT の欠点:

  • コンパイルされていないため、処理が遅くなります
  • 文字列操作が面倒
  • 最後に C# オブジェクトに入るのがより難しくなります

Linq から XML への利点:

  • コンパイルされているため、より高速に実行されます
  • より良い文字列操作を可能にします

Linq から XML への欠点:

  • 更新のためにコンパイルする必要があります

編集:明確にする必要があります。これらを長期的に実行して、Webサイトがレイアウトを時々更新する可能性があることを望んでいます。それが、コンパイルを必要としないものを使おうと思った大きな理由の 1 つです。

4

5 に答える 5

15

ユースケースをさらに知らなければ、一般的な推奨事項を提供することは困難です。

とにかく、あなたはリンゴとオレンジを比較しています。LINQ to XML (および一般的な LINQ) はクエリ言語ですが、XSLT は XML ツリー構造を変換するプログラミング言語です。これらは異なる概念です。データ ソースから特定の情報を抽出して、必要な処理を行う場合はいつでもクエリ言語を使用します (C# オブジェクトにフィールドを設定する場合など)。対照的に、変換は、データの 1 つの XML 表現を別の XML 表現に変換するのに役立ちます。

そのため、XML から C# オブジェクトを作成することが目的の場合、XSLT を使用するのではなく、.NET Framework が提供する XML データを処理するその他のテクノロジ (古いXmlDocumentXmlReaderXPathDocumentXmlSerializerまたはXDocument. 入力サイズ、入力の複雑さ、目的の出力などに応じて、それぞれに特別な長所と短所があります。

HTML のみを扱っているため、CodePlexのHTML Agility Packも参照してください。

于 2009-06-30T23:11:32.473 に答える
1

C# を使用するので、ある時点でデータが Linq (または .NET 用の他の XML コード) を通過するので、そこにすべてを貼り付けた方がよいでしょう。

XSLT を使用するやむを得ない理由 (既に多くの経験がある場合や、配置でテキスト ファイルのロールアウトが強く推奨される場合など) がない限り、すべてを 1 か所にまとめてください。

于 2009-06-30T22:25:47.197 に答える
1

私の経験では、既存の xml 要素の再配置と選択を主に扱う場合は、XSLT の方が簡潔で読みやすいです。XPath は短くて理解しやすく、xml 構文により、コードにXElementandXAttributeステートメントが散らばることがありません。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 を使用してください。

于 2009-08-25T13:17:17.977 に答える
-1

HTMLを解析しようとしているだけの場合は、どちらも使用しないでください。HTML!= XMLであり、同じように扱うことはできません。たとえば、エスケープシーケンス' ' HTMLでは完全に有効ですが、有効なXMLドキュメント内の有効なエンティティではありません(DTDなどをひどくいじることはありません)。これはあなたを噛むでしょう、私を信じてください!

また、 HTMLAgilityパック(すばらしいライブラリ)を使用することをお勧めします。

于 2009-07-21T14:35:51.157 に答える