C#html敏捷包按类名获取元素

时间:2016-04-19 07:40:33

标签: c# html html-agility-pack

我试图获得他们班级中包含某个词的所有div:

<div class="hello mike">content1</div>
<div class="hello jeff>content2</div>
<div class="john">content3</div>

我需要得到他们班级中包含单词&#34; hello&#34;的所有div。 像这样:

resultContent.DocumentNode.SelectNodes("//div[@class='hello']"))

我怎样才能使用敏捷包?

5 个答案:

答案 0 :(得分:8)

我明白了:

server_default

答案 1 :(得分:5)

我确定,因为你的div中有多个类,但是没有用。你可以试试这个:

resultContent.DocumentNode.Descendants("div").Where(d => d.Attributes["class"].Value.Contains("hello"));

答案 2 :(得分:3)

正如我写的here,从Html Agility Pack的v1.6.5版开始,它包含.HasClass("class-name")扩展方法a。

IEnumerable<HtmlNode> nodes =
    htmlDoc.DocumentNode.Descendants(0)
        .Where(n => n.HasClass("class-name"));

答案 3 :(得分:1)

由于您已指定该类必须包含某个单词,因此以下内容将确保该单词为:

  • 在字符串的开头,后跟一个空格
  • 或在字符串的中间并被空格包围
  • 或在字符串的末尾,前面有空格
  • 或类属性中唯一的类名

通过将空格包围的class属性的值与空格包围的指定单词(hello)进行比较来实现。这是为了避免像class="something-hello-something"

这样的误报
resultContent.DocumentNode.SelectNodes("//div[contains(concat(' ', @class, ' '), ' hello ')]");

答案 4 :(得分:0)

HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();
htmlDoc.Load(filePath);
 foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//div[@class='hello']")
 {
    //code
 }