便利な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>
確かに行けそうな気がします。