HtmlAgilityPack using Linq for windows phone 8.1 platform

c# html-agility-pack linq windows-phone-8.1

Question

As HtmlAgilityPack is yet not supported in windows phone 8.1,referencing manually in the project was a trick solution. But this is not the only problem. I could use XPath for my past project to select nodes. Now I can see that HtmlDocumentNode.SelectNode() function is no more(because of version compatibility may be).

what I used in my past project was similar to this

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

I searched over stackoverflow and google and got an Idea that It's still possible to select nodes using Linq.

I'm seeking for a block of code which will work like SelectNodes, SelectNode.

Loading the HtmlDocument asynchronously would be appreciated.

1
4
8/12/2014 9:49:47 AM

Accepted Answer

If you meant to translate your current code which using XPath to be using LINQ, then this will do :

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

But if you expect to find methods that accept XPath in HtmlAgilityPack version for Windows Phone 8.1 universal apps or Windows RT ("I'm seeking for a block of code which will work like SelectNodes, SelectNode"), you better don't : HtmlAgilityPack & Windows 8 Metro Apps (answer by the author of HAP).

4
5/23/2017 11:47:15 AM

Popular Answer

You can do it using the Element/s method:

        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;

This is assuming you have something like

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

and that will get the <h6> node with class songs-list.



Related Questions





Related

Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow
Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow