2017-09-05 19 views
1

は、HTMLコードです:C#HtmlAgilityPack作業のHtmlNodeCollection

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

は、今私はList<string>に3 title=をつかむしたいです。ここ
はコードです:

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

は今、どのように私は、これらの3つのタイトルをつかむことができますか?

答えて

1

があなたのxpathに/を追加し、タイトルを選択属性

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

:たとえば

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

これはHasClass拡張メソッドですか? – MoonLight

+0

**属性**タイトル**が見つからない場合、** string.Empty **(空の文字列、** "" **)が返されます –

1

ここではLinqを使用できます。 String.Emptyのことは何である

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)); 
}