7

ASP.NET ページ、ユーザー コントロール、およびマスター ページから要素を取得LINKし、それらのコンテンツを取得して、作業中のユーティリティでこれらのファイルに更新された値を書き戻す必要があります。META

これらの要素だけを取得するために正規表現を使用することもできますが、その方法にはいくつかの問題があります。

  • 入力ファイルの多くには、破損した HTML が含まれていると予想されます (欠落している要素や順序が正しくない要素など)。
  • SCRIPT有効な要素のように見えるコメントや VBScript/JavaScript などを含む要素。
  • METAIE 条件付きコメントとLINKIE 条件付きコメント内の要素を特別にケース化できるようにする必要があります
  • HTML が通常の言語ではないことは言うまでもありません

私は .NET の HTML パーサーについて調査を行い、多くの SO の投稿やブログでHTML Agility Packを推奨しています。これまで使用したことがなく、壊れた HTML や HTML フラグメントを解析できるかどうかもわかりません。(たとえば、HEAD何らかのコンテンツを含む要素のみを含むユーザー コントロールを想像してください。 noHTMLまたはBODY.) ドキュメントを読むことができることはわかっていますが、誰かがアドバイスしてくれれば、かなりの時間を節約できます。(ほとんどの SO 投稿には、完全な HTML ページの解析が含まれます。)

4

2 に答える 2

5

間違いなく、それはそれが優れていることです。

<html>実際、実際に出回っている Web ページの多くは、タグが欠落しているか、タグが不適切に閉じられているため、HTML フラグメントとして記述されている可能性があります。

HtmlAgilityPack は、ブラウザーが実行する必要があることをシミュレートします。一致しないタグがごちゃまぜになっている場合があることから、意味を理解するようにしてください。不完全な科学ですが、HtmlAgilgityPack は非常にうまく機能します。

于 2012-09-21T14:42:05.530 に答える
5

Html Agility Pack に代わるものはCsQueryです。これは、私が主な作成者である C# jQuery ポートです。CSS セレクターと完全な Query API を使用して DOM にアクセスして操作できます。これは、多くの人にとって XPATH よりも簡単です。さらに、HTML パーサーはさまざまな目的を念頭に置いて特別に設計されており、HTML を解析するためのいくつかのオプションがありますhtml, body。コンテンツ ブロックとして (つまり、完全なドキュメントとしてラップされることはありませんがtbody、ブラウザーと同様に DOM で必須であるオプションのタグは自動的に追加されます)、およびタグが作成されない真のフラグメントとして(たとえば、ビルディングブロックを扱っているだけの場合)。

詳細については、新しい DOMの作成を参照してください。

さらに、CsQuery の HTML パーサーは、オプションの終了タグの HTML5 仕様を尊重するように設計されています。たとえば、終了pタグはオプションですが、ブロックをいつ閉じるかを決定する特定のルールがあります。ブラウザーが行うのと同じ DOM を生成するために、パーサーは同じルールを実装する必要があります。CsQuery は、特定のソースに対してブラウザー DOM との高度な互換性を提供するためにこれを行います。

CsQuery の使用は非常に簡単です。

CQ docFromString = CQ.Create(htmlString); 
CQ docFromWeb = CQ.CreateFromUrl(someUrl);

// there are other methods for asynchronous web gets, creating from files, streams, etc.

// css selector: the indexer [] is like jQuery $(..)

CQ lastCellInFirstRow = docFromString["table tr:first-child td:last-child"];

// Text() is a jQuery method returning text contents of selection 

string textOfCell = lastCellInFirstRow.Text();

最後に、CsQuery は、クラス、ID、属性、およびタグでドキュメントにインデックスを付けます。セレクターは、Html Agility Pack と比較して非常に高速です。

于 2012-09-21T15:00:29.107 に答える