2017.11.24
2020.1.7

SelectNodesで現在のノード配下の要素を検索する(Html Agility Pack)

Html Agility Packで読み込んだHTMLからSelectNodesで現在のノード配下の要素を検索する方法です。

目次

  • HTMLファイル
  • SelectNodesで現在のノード配下の要素を検索
  • 参考リンク

HTMLファイル

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


<div class='list-a'>
    <div class='item'>a1</div>
    <div class='item'>a2</div>
</div>
<div class='list-b'>
    <div class='item'>b1</div>
    <div class='item'>
        <div class='name'>b2</div>
        <div class='detail'>b2d</div>
    </div>
</div>

SelectNodesで現在のノード配下の要素を検索

以下のコードでは、div要素のclassに設定した「list-a」と「list-b」をSelectSingleNodeでそれぞれ取得して、取得したノード配下の要素をSelectNodesで検索しています。


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

// list-aのノード直下のdiv要素を検索
var listA = doc.DocumentNode.SelectSingleNode("//div[@class='list-a']");
var nodes1 = listA.SelectNodes("./div");
// → 2件ヒット(a1、a2の要素)

// list-bのノード配下のすべてのdiv要素を検索
var listB = doc.DocumentNode.SelectSingleNode("//div[@class='list-b']");
var nodes2 = listB.SelectNodes(".//div");
// → 4件ヒット(b1、b2、b2d、b2とb2dの親要素)

XPATHでノードを検索する方法は便利ですが、頻繁にHTMLやXMLの解析を行うプロジェクトがあるわけでもないので、書き方をすぐに忘れてしまいます。

参考リンク

C#】関連記事