2013-03-31 43 views
5

這裏是我的代碼:CsQuery解析李項的集合

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變成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

這樣做是爲了保持CsQueryjQuery一致,其行爲方式相同。您可以通過調用.Cq()方法,例如

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

其轉換回CQ對象,如果您想了解更多jQuery十歲上下的語法,以下也適用:

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。這是一個星期對我的舊腦子做的事情。 'Cq()'從它的參數創建一個選擇集,但仍然綁定到相同的DOM,因此您需要使用Find來搜索它,而'[..]'將選擇原始DOM。 「創造」總是從它的論點中產生新的命運。 –

+1

謝謝:)很高興看到你迴應你的腳響應坪。如果你不知道,@Serg @傑米是創建並開發CsQuery的人。 –