我有兩個HTML元素的塊,如下所示:基於查詢HtmlAgilityPack過濾HTML
<div class="a-row">
<a class="a-size-small a-link-normal a-text-normal" href="/Chemical-Guys-CWS-107-Extreme-Synthetic/dp/B003U4P3U0/ref=sr_1_1_sns?s=automotive&ie=UTF8&qid=1504525216&sr=1-1">
<span aria-label="$19.51" class="a-color-base sx-zero-spacing">
<span class="sx-price sx-price-large">
<sup class="sx-price-currency">$</sup>
<span class="sx-price-whole">19</span>
<sup class="sx-price-fractional">51</sup>
</span>
</span>
<span class="a-letter-space"></span>Subscribe & Save
</a>
</div>
和HTML的下一塊:
<div class="a-row a-spacing-none">
<a class="a-link-normal a-text-normal" href="https://rads.stackoverflow.com/amzn/click/B003U4P3U0">
<span aria-label="$22.95" class="a-color-base sx-zero-spacing">
<span class="sx-price sx-price-large">
<sup class="sx-price-currency">$</sup>
<span class="sx-price-whole">22</span>
<sup class="sx-price-fractional">95</sup>
</span>
</span>
</a>
<span class="a-letter-space"></span>
<i class="a-icon a-icon-prime a-icon-small s-align-text-bottom" aria-label="Prime">
<span class="a-icon-alt">Prime</span>
</i>
</div>
這兩種元素十分相似在他們的結構中,但訣竅是,我想提取它旁邊的元素的值包含一個帶有類的span元素:aria-label =「Prime」
這就是我目前如何提取價格b它不好:
if (htmlDoc.DocumentNode.SelectNodes("//span[@class='a-color-base sx-zero-spacing']") != null)
{
var span = htmlDoc.DocumentNode.SelectSingleNode("//span[@class='a-color-base sx-zero-spacing']");
price = span.Attributes["aria-label"].Value;
}
這基本上選擇位置0的HTML元素,因爲有多個元素。但這裏的訣竅是,我想選擇包含素數值的span元素,就像我已經顯示的第二塊HTML ... 如果第二個元素具有這樣的值不存在,我只是隻需使用我寫在那裏的第一種方法...
有人可以幫我解決這個問題嗎? =)
我也試過這樣的事情:
但它仍然是返回第一個元素的xD
新版本的傢伙:
var pr = htmlDoc.DocumentNode.SelectNodes("//a[@class='a-link-normal a-text-normal']");
string prrrrrr = "";
for (int i = 0; i < pr.Count; i++)
{
if (pr.ElementAt(i).SelectNodes("//i[@class='a-icon a-icon-prime a-icon-small s-align-text-bottom']").ElementAt(i) != null)
{
prrrrrr = pr.ElementAt(i).SelectNodes("//span[@class='a-color-base sx-zero-spacing']").ElementAt(i).Attributes["aria-label"].Value;
}
}
這樣的想法是,我從HTML文件中取出所有「a」元素並創建a的HTML Node集合,然後遍歷它們,看看哪一個確實包含我正在查找的元素,然後匹配它......?
的這裏的問題是,這個if語句總是通過:
if (pr.ElementAt(i).SelectNodes("//i[@class='a-icon a-icon-prime a-icon-small s-align-text-bottom']").ElementAt(i) != null)
我如何遍歷節點集合中的每個元素?
@Stephen Muecke剛纔添加另一段代碼的問題= d – User987
任何人? =) – User987