FizzlerEx / HtmlAgilityPack QuerySelectorAll no funciona

c# html-agility-pack

Pregunta

He estado intentando configurar FizzlerEx, que se encuentra en http://fizzlerex.codeplex.com/ . Después de agregar las referencias a mi proyecto, he intentado ejecutar el código de ejemplo que figura en el sitio web; la totalidad de mi código se detalla a continuación.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using HtmlAgilityPack;
using Fizzler.Systems.HtmlAgilityPack;


namespace Fizzler_Test
{
    class Program
    {

        static void Main(string[] args)
        {
        var web = new HtmlWeb();
            var document = web.Load("http://example.com/page.html");
            var page = document.DocumentNode;

            foreach (var item in page.QuerySelectorAll("div.item"))
            {
                var title = item.QuerySelector("h3:not(.share)").InnerText;
                var date = DateTime.Parse(item.QuerySelector("span:eq(2)").InnerText);
                var description = item.QuerySelector("span:has(b)").InnerHtml;
            }
        }
}

Sin embargo, esto produce errores de compilación, alegando que:

Error   1   'HtmlAgilityPack.HtmlNode' does not contain a definition for 'QuerySelectorAll' and no extension method 'QuerySelectorAll' accepting a first argument of type 'HtmlAgilityPack.HtmlNode' could be found (are you missing a using directive or an assembly reference?)

Parece que QuerySelectorAll no es realmente una parte de HtmlNode, pero dado que este es el código de ejemplo oficial tomado literalmente del sitio web, espero que los creadores entiendan cómo funciona su biblioteca. Estoy en una pérdida en cuanto a lo que podría ser el problema real.

Un problema relacionado parece haberse encontrado aquí, pero nunca se encontró una respuesta adecuada: Fizzler y QuerySelectorAll

Respuesta popular

Parece que QuerySelectorAll no es realmente una parte de HtmlNode , pero dado que este es el código de ejemplo oficial tomado literalmente del sitio web, espero que los creadores entiendan cómo funciona su biblioteca. Estoy en una pérdida en cuanto a lo que podría ser el problema real.

Usted es correcto acerca de esta parte. Aunque no está en lo cierto acerca de la segunda parte, ya que el autor de HAP no es el autor de FizzlerEx. El problema está en otra parte. Simplemente observando el error, obtendrá la única pista que necesita para resolverlo.

Error   1   'HtmlAgilityPack.HtmlNode' does not contain a definition for 'QuerySelectorAll' and no extension method 'QuerySelectorAll' accepting a first argument of type 'HtmlAgilityPack.HtmlNode' could be found (are you missing a using directive or an assembly reference?)

Entonces, qué obtenemos; nos dice que no hay ningún método llamado QuerySelectorAll en la clase HtmlNode en el espacio de nombres HtmlAgilityPack . Si echamos un vistazo al código fuente de HAP, puede determinar fácilmente que el mensaje de error es correcto, ya que no hay ningún método con ese nombre en la clase que estamos buscando.

Código fuente para HtmlAgilityPack.HtmlNode - clase

¿Dónde está este método que queremos usar, pero no podemos encontrar?

Está aquí , en la clase Fizzler.Systems.HtmlAgilityPack.HtmlNodeSelection .

Después de probar algunas cosas, hago que el código funcione perfectamente tal como es. El problema fueron las extensiones en la referencia entre Fizzler y el código fuente de HAP.

Si descargas Fizzler, obtienes HtmlAgilityPack al mismo tiempo. Cuando agrega las referencias en Visual Studio (suponiendo que lo use), solo agregue

  • Fizzler.Systems.HtmlAgilityPack.dll
  • HtmlAgilityPack.dll

¡Limpie su solución y reconstrúyala y debería funcionar!



Related

Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow