CsQuery to parse a collection of li items

梦想与她 提交于 2020-01-12 08:25:33

问题


Here's my code:

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

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

Inside the foreach loop li turns into a IDomObject variable and I can no longer drill down further into it.

Any suggestions? Here is the example HTML I'm trying to parse:

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

I need to grab the text of each h2 element.


回答1:


This is done in order to keep CsQuery consistent with jQuery which behaves the same way. You can convert it back to a CQ object by calling the .Cq() method as such

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

Or if you'd like more jQueryish syntax, the following also works:

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

Your code, could be re-factored to the following if you'd like:

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


来源:https://stackoverflow.com/questions/15725531/csquery-to-parse-a-collection-of-li-items

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!