HtmlAgilityPack使用Linq for windows phone 8.1平台

c# html-agility-pack linq 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 = @"<html>
<body>
<center>
<h6>Hello  </h6>
<h6>World!   </h6>
<h6 class=""songs-list"">
Insert that one song here
</h6>
</center>
</body>
</html>"

这将获得带有类歌曲列表的<h6>节点。




许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因