XPath クエリ基礎(HtmlAgilityPack)

1. XPathとは

XPath(XML Path Language)は、XMLやHTML文書内のノード(要素・属性・テキストなど)をパス構文で指定して検索する言語です。HtmlAgilityPackはHTMLを内部的にXMLライクな構造として扱うため、XPathを使って効率よくノードを探索・抽出できます。


2. 基本的な構文例

以下はXPathの基本構文です。

XPath 式 説明
/html/body/div html直下のbody内のdiv要素を取得
//div 文書中のすべてのdiv要素を取得
//a[@href] href属性を持つすべてのa要素を取得
//p[@class='intro'] class属性がintrop要素を取得
//ul/li[1] ul内の最初のli要素を取得
//table/tr/td[text()='価格'] テキストが「価格」のtd要素を取得

3. HtmlAgilityPackでのXPath使用例

csharp
var doc = new HtmlDocument(); doc.Load("sample.html"); // XPathでdivタグをすべて取得 var divNodes = doc.DocumentNode.SelectNodes("//div"); foreach (var node in divNodes) { Console.WriteLine(node.InnerText); } // 特定のclass属性を持つ要素を取得 var introParagraph = doc.DocumentNode.SelectSingleNode("//p[@class='intro']"); Console.WriteLine(introParagraph?.InnerText);

4. XPath使用時の注意点

  • HTMLが不正な構文でも、HtmlAgilityPackは自動補正を試みるため、XPathが思わぬノードを指すことがあります。

  • 空の要素や属性名の大文字・小文字の違いに注意が必要です(HTMLは大文字小文字を区別しないが、XPathでは区別されます)。

  • ノードが存在しないときは null が返されるので、Nullチェックを行うことが重要です。


5. 補足:属性値の部分一致

XPathでは関数も利用可能です。

csharp
// class属性に'item'が含まれるdiv var nodes = doc.DocumentNode.SelectNodes("//div[contains(@class, 'item')]");

まとめ

HtmlAgilityPackではXPathを使うことで、HTML文書から特定の要素や属性を効率的に抽出できます。XPathの基礎構文を理解しておくことで、複雑なHTML構造にも柔軟に対応したスクレイピングやデータ抽出が可能になります。

ChatGPT4o 生成日:2025/06/23