2013-03-31 15 views
5

Hier mein Code ist:CsQuery eine Sammlung von li Artikel analysieren

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

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

Innerhalb der foreach-Schleife li in eine IDomObject Variable dreht, und ich kann nicht mehr Drilldown weiter hinein.

Irgendwelche Vorschläge? Hier ist das Beispiel HTML, das ich versuche zu analysieren:

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

Ich muss den Text jedes h2 Element greifen.

Antwort

12

Dies wird getan, um CsQuery konsistent mit jQuery zu halten, die sich auf die gleiche Weise verhält. Sie können es zu einem CQ Objekt konvertieren zurück durch die .Cq() Methode als solche

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

Aufruf Oder wenn Sie mehr jQuery ish Syntax möchten, folgende Arbeiten auch:

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

Ihr Code, könnte Wenn Sie möchten:

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

crikey Ich habe Ihre Antwort zweimal bearbeitet, da ich mich nicht erinnern konnte, dass Create() an ein neues Dom bindet. Das hat eine Woche meines alten Gehirns gekostet. 'Cq()' erzeugt einen Auswahlsatz aus seinem Argument, ist aber trotzdem an dasselbe DOM gebunden, so dass Sie 'Find' verwenden müssen, um darin zu suchen, während' [..] 'sich gegen das ursprüngliche DOM auswählt. Create macht immer ein neues dom aus seinem Argument. –

+1

Danke :) Freut mich zu sehen, dass du wieder auf deinen Füßen bist, die auf Pings reagieren. @Serg, falls du es nicht weißt, Jamie ist der Typ, der CsQuery entwickelt und entwickelt. –

Verwandte Themen