2017.11.24
2020.1.7

SelectNodesで部分一致検索を行う(Html Agility Pack)

Html Agility Packで読み込んだHTMLから特定の文字列を含んだノードを検索する方法です。

目次

  • HTMLファイル
  • SelectNodesで部分一致検索
  • 参考リンク

HTMLファイル

読み込むHTMLは以下の通りです。(c:\temp\test.html)


<div class='item1'>a</div>
<div class='item1 active'>b</div>
<div class='item2'>c</div>

SelectNodesで部分一致検索

以下のコードでは、div要素のclassに設定したクラス名からSelectNodesで指定した条件に合致する要素のみを検索する方法です。


var doc = new HtmlDocument();
doc.Load(@"c:\temp\test.html");

// classに「item1」のみ設定されているノードを検索
var nodes1 = doc.DocumentNode.SelectNodes("//div[@class='item1']");
// → 1番目の要素のみヒット(a)

// classに「item」が含まれるノードを検索
var nodes2 = doc.DocumentNode.SelectNodes("//div[contains(@class, 'item')]");
// → すべての要素がヒット(a、b、c)

// classに「item1」が含まれるノードを検索
var nodes3 = doc.DocumentNode.SelectNodes("//div[contains(@class, 'item1')]");
// → 1番目と2番目の要素がヒット(a、b)

HTMLを解析する場合、完全一致する要素を抽出するよりも、なにかしらの要素(ないし属性値)を含んだノードを検索することの方が多いのでよく使います。

参考リンク

C#】関連記事