web-dev-qa-db-ja.com

C#で使用できるjQueryのようなCSS / HTMLセレクターはありますか?

C#で使用できるjQueryのようなcssセレクターがあるかどうか疑問に思っています。

現在、私は正規表現を使用していくつかのhtml文字列を解析しており、jQueryのcssセレクターのようなものを希望の要素に一致させる方がはるかに優れていると思いました。

63
Dave

@jamietreの CsQuery が必ず表示されます。この質問に対する彼の答えをチェックしてください!

Fizzler および Sharp-Query は同様の機能を提供しますが、プロジェクトは中止されたようです。

69
Andy S

2012年10月18日更新

CsQuery はリリース1.3になりました。最新のリリースには validator.n HTML5パーサーのC#ポートが組み込まれています。その結果、CsQueryは、HTML5仕様を使用して無効なマークアップ処理を行い、完全に標準に準拠したDOMを生成します。

元の回答

古い質問ですが新しい答えです。最近、CsQueryのバージョン1.1をリリースしました。これは、約1年間取り組んできたC#で記述された.NET 4のjQueryポートです。 NuGet も "CsQuery"として

現在のリリースでは、すべてのCSS2およびCSS3セレクター、すべてのjQuery拡張、およびすべてのjQuery DOM操作メソッドが実装されています。 jQueryとsizzle(jQuery CSS選択エンジン)からのすべてのテストを含む広範なテストカバレッジがあります。 Fizzlerと直接比較するためのパフォーマンステストもいくつか含めました。ほとんどの場合、CsQueryはそれを大幅に上回ります。例外は、実際にはFizzlerの方が速い最初の場所でHTMLをロードすることです。これは、fizzlerがインデックスを作成しないためだと思います。ただし、最初に選択した後は、その時間が返されます。

Githubサイトにはドキュメントがありますが、基本的なレベルでは次のように機能します。

HTMLの文字列から作成する

_CQ dom = CQ.Create(htmlString);
_

Webから同期的に読み込む

_CQ dom = CQ.CreateFromUrl("http://www.jquery.com");
_

非同期でロード(非ブロッキング)

_CQ.CreateFromUrlAsync("http://www.jquery.com", responseSuccess => {
    Dom = response.Dom;        
}, responseFail => {
    ..
});
_

セレクターを実行してjQueryを実行する

_var childSpans = dom["div > span"];
childSpans.AddClass("myclass");
_

CQオブジェクトは、jQueryオブジェクトに似ています。上記で使用されているプロパティインデクサーは、デフォルトのメソッドです($(...)など)。

出力:

_string html = dom.Render();
_
78
Jamie Treworgy

XMLの場合、XPathを使用する可能性があります...

1

あなたが何を達成しようとしているのかは完全にはわかりませんが、データを抽出しようとしているHTMLドキュメントがある場合は、 parser でロードすることをお勧めしますその後、オブジェクトにクエリを実行して目的の要素を取得するのはかなり簡単です。

上でリンクしたパーサーでは、XPathクエリを使用できます。

誤解した場合はお知らせください。

1
patjbs

JQueryのようなものではありませんが、これは役立ちます: http://www.codeplex.com/htmlagilitypack

1
Daniel