HtmlAgilityPack使用Linq for windows phone 8.1平台

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

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

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

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

我正在寻找一个像SelectNodesSelectNode一样工作的代码块。

异步加载HtmlDocument将不胜感激。

如果您打算将使用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的方法(“ 我正在寻找一些像SelectNodesSelectNode一样工作的代码 ”),你最好不要: HtmlAgilityPack &Windows 8 Metro Apps (由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 = @"  
Hello
World!
Insert that one song here
"

这将获得带有类歌曲列表的

节点。