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