特定の要素配下のテキストノード文字列を要素ごとにすべて取得する方法(Html Agility Pack)
Html Agility Packで取得したノードに対して、要素配下にあるテキストノード文字列(子要素のテキストノード含む)をまとめて取得、または要素ごとに別々で取得する方法です。
結果としてはまとめて取得するので問題なかったのですが、別々で取得する方法を見つけて、こんな方法もあるのかと思ったのでメモとして残しておきます。
目次
- 対象のHTML
- テキストノードの文字列をまとめて取得
- テキストノードの文字列を要素ごとに別々で取得
対象のHTML
Html Agility Packで読み取るHTMLは以下の通りとします。
<div>
<h3>タイトル<a href="#">リンク<<a><h3>
</div>
テキストノードの文字列をまとめて取得
Html Agility Packで対象となる要素のテキストノードの文字列をまとめて取得する場合は、以下のように、親要素のInnerTextで取得できます。
var titleNode = doc.DocumentNode.SelectSingleNode("//h3");
if (titleNode != null)
{
Console.WriteLine(titleNode.InnerText);
}
実行結果は以下の通り。
テキストノードの文字列を要素ごとに別々で取得
今度は要素ごとに別々で取得する方法です。
var titleNode = doc.DocumentNode.SelectSingleNode("//h3");
if (titleNode != null)
{
foreach (var node in titleNode.SelectNodes(".//text()"))
{
Console.WriteLine(node.InnerText);
}
}
上記のコードの実行結果は以下の通り。
通常はまとめて取得して問題ないですが、場合によっては要素ごとに処理する必要があるかと思います。