クラスに特定のWordが含まれているすべてのdivを取得しようとしています。
<div class="hello mike">content1</div>
<div class="hello jeff>content2</div>
<div class="john">content3</div>
クラスに "hello"という単語が含まれているすべてのdivを取得する必要があります。このようなもの:
resultContent.DocumentNode.SelectNodes("//div[@class='hello']"))
アジリティパックでそれを行うにはどうすればよいですか?
わかった:
resultContent.DocumentNode.SelectNodes("//div[contains(@class, 'hello')]"))
Html Agility Packのバージョンv1.6.5以降、.HasClass("class-name")
拡張メソッドが含まれています。
IEnumerable<HtmlNode> nodes =
htmlDoc.DocumentNode.Descendants(0)
.Where(n => n.HasClass("class-name"));
Divに複数のクラスがあるため、きちんと機能しないと思います。代わりにこれを試すことができます:
resultContent.DocumentNode.Descendants("div").Where(d => d.Attributes["class"].Value.Contains("hello"));
クラスに特定のWordを含める必要があると指定したので、次のようにすると、Wordが確実に含まれます。
これは、スペースで囲まれたクラス属性の値を、スペースで囲まれた指定されたWord(hello
)と比較することによって行われます。これは、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
}