J'essaie d'obtenir toutes les divs que leur classe contient un certain mot:
<div class="hello mike">content1</div>
<div class="hello jeff>content2</div>
<div class="john">content3</div>
J'ai besoin d'obtenir tous les divs que leur classe contient le mot "bonjour". Quelque chose comme ça:
resultContent.DocumentNode.SelectNodes("//div[@class='hello']"))
comment puis-je le faire avec le pack d'agilité?
J? ai compris:
resultContent.DocumentNode.SelectNodes("//div[contains(@class, 'hello')]"))
Depuis la version v1.6.5 de Html Agility Pack, il contient la méthode d'extension .HasClass("class-name")
.
IEnumerable<HtmlNode> nodes =
htmlDoc.DocumentNode.Descendants(0)
.Where(n => n.HasClass("class-name"));
Je suis sûr que parce qu'il y a plusieurs classes dans votre div, cela ne fonctionne pas. Vous pouvez essayer ceci à la place:
resultContent.DocumentNode.Descendants("div").Where(d => d.Attributes["class"].Value.Contains("hello"));
comme vous avez spécifié que la classe doit contenir un certain mot, les éléments suivants garantiront que le mot est:
Pour ce faire, il compare la valeur de l'attribut class entouré d'espaces avec le mot spécifié (hello
) entouré d'espaces. C'est pour éviter les faux positifs comme class="something-hello-something"
resultContent.DocumentNode.SelectNodes("//div[contains(concat(' ', @class, ' '), ' hello ')]");
HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();
htmlDoc.Load(filePath);
foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//div[@class='hello']")
{
//code
}