読者です 読者をやめる 読者になる 読者になる

Html Agility PackのSelectNodesがWindowsストアアプリでは使えない

便利なHTML ParserのHtml Agility Packですが、
XPathを使って、さあ、HTMLからあるclassのノードを抽出しようと思ったら、
どうもWindowsストアアプリではSelectNodes使えないみたいです。
調べてみるとLINQで取り出せとの書き込みが多かったので、試してみました。

このHTMLからmyClassのdivを取り出します。

<!DOCTYPE html>
<html>
<body>
 <div class="myClass">A</div>
 <div class="otherClass">B</div>
 <div class="myClass">C</div>
 </body>
</html>


こんな感じで書いてみました。
重要なのはLINQの部分です。

//上のHTMLをセット
string htmltext = @"<!DOCTYPE html><html><body><div class=""myClass"">A</div><div class=""otherClass"">B</div><div class=""myClass"">C</div></body></html>"; 


HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(htmlText);

//SelectNodesではなくDescendantsを使用
IEnumerable<HtmlNode> htmlNodes = doc.DocumentNode.Descendants();

//LINQで取り出し
IEnumerable<HtmlNode> clsFilteredHtmlNodes = htmlNodes.Where(n => n.Name == "div").Where(x => x.Attributes["class"] != null && x.Attributes["class"].Value == "myClass");

StringBuilder sb = new StringBuilder();
foreach (var h in clsFilteredHtmlNodes)
{
   sb.Append(h.OuterHtml);
}
ShowPopup(sb.ToString());

出力結果はこんな感じ。

<div class="myClass">A</div><div class="myClass">C</div>


確かに行けそうな気がします。