2013-03-31 12 views
5

を解析するためにここに私のコードだ:CsQueryのliアイテムのコレクション

CQ dom = CQ.Create(htmlString); 
var items = dom[".blog-accordion li"]; 

foreach (var li in items) 
{ 
    var newTournament = false; 
    var test = li["header h2"]; 
} 

foreachループli Insideは、IDomObject変数になり、私はもはや、さらにそれをドリルダウンすることはできません。

提案がありますか?以下は、解析しようとしているHTMLの例です:

<ul> 
    <li> 
    <header> 
     <h2>Test</h2> 
    </header> 
    </li> 
    <li> 
    <header> 
     <h2>Test 2</h2> 
    </header> 
    </li> 
    <li> 
    <header> 
     <h2>Test 3</h2> 
    </header> 
    </li> 
</ul> 

各h2要素のテキストを取得する必要があります。

答えて

12

これは、CsQueryと同じ方法で動作するjQueryと一致するように行われます。あなたは、このような

foreach (var li in items) 
{ 
    var newTournament = false; 
    var test = li.Cq().Find("header h2"); 
} 

それとも、もっとjQueryっぽい構文をたい場合は、次のようにも働くよう.Cq()メソッドを呼び出すことにより、バックCQオブジェクトに変換することができます

foreach (var li in items) 
{ 
    var newTournament = false; 
    var test = CQ.Create(li)["header h2"]; 
} 

あなたのコードは、可能性があり

var texts = CQ.Create(htmlString)[".blog-accordion li header h2"] 
       .Select(x=>x.Cq().Text()); 
+1

crikey私はCreate()が新しいdomにバインドすることを覚えていないので、私はあなたの答えを2回編集したばかりです。それは、私の古い脳に一週間ほどしたものです。 'Cq()'はその引数から選択セットを作成しますが、同じDOMに束縛されているので、 'Find'を使って検索する必要がありますが、' [..] 'は元のDOMを選択します。 'Create'は常にその引数から新しいdomを作ります。 –

+1

ありがとう:あなたがpingに応答する足に戻っているのを見てうれしい。あなたが知らない場合のために@Serg、JamieはCsQueryを作成し開発している人です。 –

関連する問題