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」からhtmlDocを選択します。

私はあなたのようなものが必要だと思います:

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のANSスパンの一部が存在しない場合、それはクラッシュしないことを願っています:HtmlAgilityPackの以前のバージョンが空のリストの代わりにnullを返しSelectNodes何も見つかりませんでした。

EDIT
内側の選択肢の "xpath query"を変更する必要があるかもしれません: "//"を ".//"(最初は余分なもの)に変更して、本当にサブノードが必要であることを知らせます。 AgilityPackが通常のXML-XPathと同じように動作する場合(私は100%確信していません)、最初の "//"はサブノードから指定したとしても、ドキュメントのルートから検索します。 ".//"は常に検索しているノードから検索します。

main.SelectNodes("//div[@class='rating']")おそらく)もございます<div class="rating">の外の<div class="rightcol">あなたは前の行で見つかりました。 main.SelectNodes(".//div[@class='rating']")はそれを修正する必要があります。




ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ