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
将是值得赞赏的。
如果您打算将当前使用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。