HtmlAgilityPack使用Linq为windows phone 8.1平台

本文关键字:平台 phone windows 使用 Linq HtmlAgilityPack | 更新日期: 2023-09-27 18:17:31

由于windows phone 8.1还不支持HtmlAgilityPack,因此在项目中手动引用是一个技巧解决方案。但这并不是唯一的问题。我可以在过去的项目中使用XPath来选择节点。现在我可以看到HtmlDocumentNode.SelectNode()函数不再(因为版本兼容性可能是)。

我在过去的项目中使用的类似于此

HtmlNode parent = document.DocumentNode.SelectSingleNode("//ul[@class='songs-list1']");
HtmlNodeCollection x = parent.ChildNodes;

我搜索了stackoverflow和google,并得到了一个想法,它仍然可以使用Linq选择节点。

我正在寻找一个代码块,将工作像SelectNodes, SelectNode

异步加载HtmlDocument将是值得赞赏的。

HtmlAgilityPack使用Linq为windows phone 8.1平台

如果您打算将当前使用XPath的代码转换为使用LINQ,那么可以这样做:

HtmlNode parent = document.DocumentNode
                          .Descendants("ul")
                          .FirstOrDefault(o => o.GetAttributeValue("class", "") 
                                                   == "songs-list1")
HtmlNodeCollection x = parent.ChildNodes;

但是如果你希望在Windows Phone 8.1通用应用程序或Windows RT的HtmlAgilityPack版本中找到接受XPath的方法("我正在寻找一段代码,它将像SelectNodes, SelectNode一样工作"),你最好不要:Windows 8 Metro应用程序(由HAP作者回答)。

您可以使用Element/s方法:

        HtmlDocument doc = new HtmlDocument();
        doc.LoadHtml(htmlString);
        var h6Nodes = from h6element in doc.DocumentNode.Element("body").Element("center").Elements("h6")
                      where h6element.Attributes["class"].Value.Equals("songs-list")                      
                      select h6element;

假设你有像

这样的东西
string htmlString = @"<html>
<body>
<center>
<h6>Hello  </h6>
<h6>World!   </h6>
<h6 class=""songs-list"">
Insert that one song here
</h6>
</center>
</body>
</html>"

,这将获得<h6>节点与类songs-list。