66

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

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

4

5 に答える 5

80

2012年10月18日更新

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

元の回答

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

現在のリリースでは、すべてのCSS2およびCSS3セレクター、すべてのjQuery拡張機能、およびすべてのjQueryDOM操作メソッドが実装されています。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();
于 2012-06-18T20:51:14.133 に答える
72

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

FizzlerSharp-Queryは同様の機能を提供しますが、プロジェクトは放棄されたようです。

于 2009-11-19T14:53:37.567 に答える
2

jQueryとは異なりますが、これが役立つ場合があります:http: //www.codeplex.com/htmlagilitypack

于 2009-10-16T21:56:34.333 に答える
1

XMLの場合、XPathを使用できます...

于 2009-10-16T21:53:32.077 に答える
1

何を達成しようとしているのか完全にはわかりませんが、データを抽出しようとしているHTMLドキュメントがある場合は、パーサーを使用してロードすることをお勧めします。そうすれば、かなり簡単になります。オブジェクトをクエリして、目的の要素をプルします。

上でリンクしたパーサーでは、XPathクエリを使用できます。これは、探しているもののように聞こえます。

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

于 2009-10-16T21:54:21.203 に答える