HtmlAgilityPack usando Linq para la plataforma Windows Phone 8.1

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

Pregunta

Como HtmlAgilityPack aún no es compatible con Windows Phone 8.1, la referencia manual en el proyecto fue una solución engañosa. Pero este no es el único problema. Podría usar XPath en mi proyecto anterior para seleccionar nodos. Ahora puedo ver que la función HtmlDocumentNode.SelectNode() ya no existe (debido a la compatibilidad de la versión).

Lo que usé en mi proyecto anterior fue similar a este

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

Busqué sobre stackoverflow y google y obtuve una idea de que aún es posible seleccionar nodos utilizando Linq.

Estoy buscando un bloque de código que funcione como SelectNodes , SelectNode .

Se apreciaría cargar el documento HtmlDocument forma asíncrona.

Respuesta aceptada

Si pretendía traducir su código actual que usa XPath para usar LINQ, entonces esto hará:

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

Pero si espera encontrar métodos que acepten XPath en la versión HtmlAgilityPack para aplicaciones universales de Windows Phone 8.1 o Windows RT (" Estoy buscando un bloque de código que funcione como SelectNodes , SelectNode "), es mejor que no lo haga: HtmlAgilityPack & Windows 8 Metro Apps (respuesta del autor de HAP).


Respuesta popular

Puedes hacerlo usando el método 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;

Esto es asumiendo que tienes algo como

        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;

y que obtendrá el nodo <h6> con la lista de canciones de la clase.




Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué