FizzlerEx / HtmlAgilityPack QuerySelectorTutti i problemi non funzionano

c# html-agility-pack

Domanda

Ho provato a installare FizzlerEx, trovato su http://fizzlerex.codeplex.com/ . Dopo aver aggiunto i riferimenti al mio progetto, ho tentato di eseguire il codice di esempio fornito sul sito Web: la totalità del mio codice è elencata di seguito.

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;
            }
        }
}

Tuttavia, questo genera errori di compilazione, sostenendo che:

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?)

Sembrerebbe che QuerySelectorAll non sia in realtà una parte di HtmlNode, ma dato che questo è il codice di esempio ufficiale estratto dal sito web, mi aspetto che i creatori capiscano come funziona la loro libreria. Sono in perdita su quale potrebbe essere il vero problema.

Un problema correlato sembra essere stato trovato qui, ma nessuna risposta adatta è mai stata trovata: Fizzler e QuerySelectorAll

Risposta popolare

Sembrerebbe che QuerySelectorAll non sia in realtà una parte di HtmlNode , ma dato che questo è il codice di esempio ufficiale estratto dal sito web, mi aspetto che i creatori capiscano come funziona la loro libreria. Sono in perdita su quale potrebbe essere il vero problema.

Hai ragione su questa parte. Anche se non sei corretto sulla seconda parte, poiché l'autore di HAP non è l'autore di FizzlerEx. Il problema è altrove. Semplicemente osservando l'errore, ottieni l'unico indizio necessario per risolvere questo problema.

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?)

Quindi, cosa otteniamo? ci dice che non esiste un metodo chiamato QuerySelectorAll nella classe HtmlNode nello spazio dei nomi HtmlAgilityPack . Se diamo uno sguardo al codice sorgente di HAP, puoi facilmente determinare che il messaggio di errore è effettivamente corretto, poiché non esiste un metodo con quel nome nella classe che stiamo cercando.

Codice sorgente per HtmlAgilityPack.HtmlNode - class

Dov'è questo metodo che vogliamo usare, ma non possiamo trovare?

È qui , in Fizzler.Systems.HtmlAgilityPack.HtmlNodeSelection .

Dopo aver provato alcune cose, ho il codice per funzionare perfettamente così com'è. Il problema erano le estensioni nel riferimento tra il codice sorgente Fizzler e HAP.

Se scarichi Fizzler, ottieni HtmlAgilityPack allo stesso tempo. Quando aggiungi i riferimenti in Visual Studio (supponendo che tu lo usi), aggiungi solo

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

Pulisci la tua soluzione e ricostruiscila e dovrebbe funzionare!



Related

Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow