HtmlAgilityPack使用Linq在Windows Phone 8.1平台上的应用

4

由于HtmlAgilityPack在Windows Phone 8.1上不受支持,因此手动引用项目是一个巧妙的解决方案。但这并不是唯一的问题。我过去的项目中可以使用XPath选择节点。现在我发现HtmlDocumentNode.SelectNode()函数已经不存在了(可能是由于版本兼容性)。

我过去项目中所使用的类似于以下内容:

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

我在stackoverflow和谷歌上搜索得知,使用Linq仍然可以选择节点。我正在寻找一段代码,它可以像SelectNodes、SelectNode一样工作。如果可以异步加载HtmlDocument将不胜感激。
2个回答

4
如果您想将使用XPath的当前代码转换为使用LINQ,那么这样做就可以:
HtmlNode parent = document.DocumentNode
                          .Descendants("ul")
                          .FirstOrDefault(o => o.GetAttributeValue("class", "") 
                                                   == "songs-list1")
HtmlNodeCollection x = parent.ChildNodes;

但如果你期望在HtmlAgilityPack Windows Phone 8.1通用应用程序或Windows RT版本中找到接受XPath的方法(“我正在寻找一段代码,它能像SelectNodes、SelectNode一样工作”),那么你最好不要这样做:HtmlAgilityPack & Windows 8 Metro Apps(作者提供的答案)。


什么是 nullparent 是 null 吗?尝试保存你的 HtmlDocument 并查看它是否实际上具有带有这样的 class 属性的 <ul> - har07
是的,父节点为空。我确定该节点及其类名。 - Faysal Ahmed
请检查/调试。不要猜测,因为我对这段代码也很确定,在使用包含<ul class="songs-list1">的简单HTML进行测试时,它运行良好。或者发布您的HTML,以便我们确认此代码是否有效。 - har07
好的,基本上我正在尝试解析这个网站http://www.songspk.name/,并尝试获取专辑更新列表部分。请您自行检查。 - Faysal Ahmed
只是为了您的参考,我使用以下两行代码来获取“HTML文档”HtmlDocument document = new HtmlDocument(); document.LoadHtml(latestNewsUrl); - Faysal Ahmed
显示剩余2条评论

1
你可以使用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>"

这将获取带有 class="songs-list" 的 <h6> 节点。


请问一下,“body”和“center”参数分别是什么意思? - Faysal Ahmed
这些只是示例标签!在您的情况下,它将是Elements("ul")。 - Tyress

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接