SilverLight
SilverLight

Reputation: 20468

C# HtmlAgilityPack Working On HtmlNodeCollection

Here is html codes :

<div id="frmPnlProductGallery">
        <ul class="clearfix">
                <li>
                    <a data-index="0" class="productItem" href="javascript:void(0)" title="https://file.digi-kala.com/digikala/Image/Webstore/ProductPhoto/P_118274/Original/234942.jpg" rel="dk-gallery-item" data-imgurl="https://file.digi-kala.com/digikala/Image/Webstore/ProductPhoto/P_118274/Original/234942.jpg">
                    </a>
                </li>
                <li>
                    <a data-index="1" class="productItem" href="javascript:void(0)" title="https://file.digi-kala.com/digikala/Image/Webstore/ProductPhoto/P_118274/Original/c9ebc3.jpg" rel="dk-gallery-item" data-imgurl="https://file.digi-kala.com/digikala/Image/Webstore/ProductPhoto/P_118274/Original/c9ebc3.jpg">
                    </a>
                </li>
                <li>
                    <a data-index="2" class="productItem" href="javascript:void(0)" title="https://file.digi-kala.com/digikala/Image/Webstore/ProductPhoto/P_118274/Original/12199f.jpg" rel="dk-gallery-item" data-imgurl="https://file.digi-kala.com/digikala/Image/Webstore/ProductPhoto/P_118274/Original/12199f.jpg">
                    </a>
                </li>
        </ul>
    </div>

Now i want to grab three title= into a List<string>.
Here is the codes :

var lis = htmlDoc.DocumentNode.SelectNodes("//div[@id='frmPnlProductGallery']//ul//li");
List<string> ls_images = new List<string>();

Now how can i grab those three titles?

Upvotes: 1

Views: 1611

Answers (2)

Alex Zaitsev
Alex Zaitsev

Reputation: 2766

Add /a to your xpath and select title attribute

List<string> ls_images = htmlDoc.DocumentNode
      .SelectNodes(@"div[@id='frmPnlProductGallery']/ul/li/a")
      .Select(x => x.GetAttributeValue("title", string.Empty))
      .ToList();

Upvotes: 1

Hung Cao
Hung Cao

Reputation: 3208

You can use Linq here. For example

document.DocumentNode.Descendants("a").Where(_ => _.HasClass("productItem")).Select(_ => _.GetAttributeValue("title", ""));

This is the HasClass extension method:

public static bool HasClass(this HtmlNode node, params string[] classValueArray)
{
     var classValue = node.GetAttributeValue("class", "");
     var classValues = classValue.Split(' ');
     return classValueArray.All(c => classValues.Contains(c));
}

Upvotes: 2

Related Questions