編寫查詢以使用HtmlAgilityPack解析HTML DOCUMENT

c# html html-agility-pack linq

我想得到span class =“floatClear”中該元素的A href,其評級為最小值
span class =“star-img stars_4”

如何使用HtmlAgilityPack來實現此行為我已經提供了我的文件的html源代碼

<div class="businessresult">  //will repeat


      <div class="rightcol">

       <div class="rating">

        <span class="star-img stars_4">
          <img height="325" width="84" src="http://media1.px" alt="4.0 star rating"   **title**="4.0 star rating">
         </span>

        </div>
      </div>

        <span class="floatClear">
             <a class="ybtn btn-y-s" href="/writeareview/biz/KaBw8UEm8u6war_loc%NY">
        </span>
</div>

我寫的查詢

<div class="businessresult">  //will repeat


      <div class="rightcol">

       <div class="rating">

        <span class="star-img stars_4">
          <img height="325" width="84" src="http://media1.px" alt="4.0 star rating"   **title**="4.0 star rating">
         </span>

        </div>
      </div>

        <span class="floatClear">
             <a class="ybtn btn-y-s" href="/writeareview/biz/KaBw8UEm8u6war_loc%NY">
        </span>
</div>

但我不知道如何在LINQ查詢的最後一行應用條件!

一般承認的答案

不要從整個htmlDoc中選擇“rating”,從之前找到的“main”中選擇它。

我猜你需要這樣的東西:

var lowestreview = 
  from main in htmlDoc.DocumentNode.SelectNodes("//div[@class='rightcol']") 
   from rating in main.SelectNodes("//div[@class='rating']")
     from ratingspan in rating.SelectNodes("//span[@class='star-img stars_4']")
      from floatClear in ratingspan.SelectNodes("//span[@class='floatClear']")
   select new { Rate = ratingspan.InnerText, AHref = floatClear.InnerHtml };

我希望如果其中一些div不存在,它不會崩潰:當SelectNodes沒有找到任何內容時,HtmlAgilityPack的先前版本返回null而不是空列表。

編輯
您可能還需要更改內部選擇的“xpath查詢”:將“//”更改為“.//”(開頭的額外值)以表示您確實需要子節點。如果AgilityPack的工作方式與常規的XML-XPath相同(我不是100%確定),那麼開頭的“//”將從文檔的根目錄進行搜索,即使您從子節點指定它也是如此。 “.//”將始終從您搜索的節點進行搜索。

一個main.SelectNodes("//div[@class='rating']")將(可能)在上一行中找到的<div class="rightcol">之外找到<div class="rating"> s 。一個main.SelectNodes(".//div[@class='rating']")應該解決這個問題。




許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因