FizzlerEx / HtmlAgilityPack QuerySelectorAll funktioniert nicht

c# html-agility-pack

Frage

Ich habe versucht, FizzlerEx einzurichten, gefunden unter http://fizzlerex.codeplex.com/ . Nachdem ich die Referenzen zu meinem Projekt hinzugefügt habe, habe ich versucht, den auf der Website angegebenen Beispielcode auszuführen. Der gesamte Code ist unten aufgeführt.

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

Dies führt jedoch zu Build-Fehlern und behauptet:

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

Es scheint, dass QuerySelectorAll nicht wirklich ein Teil von HtmlNode ist, aber da dies der offizielle Beispielcode ist, der wörtlich von der Website übernommen wurde, würde ich erwarten, dass die Entwickler verstehen, wie ihre Bibliothek funktioniert. Ich weiß nicht, was das eigentliche Problem sein könnte.

Ein verwandtes Problem scheint hier gefunden worden zu sein, aber keine passende Antwort wurde jemals gefunden: Fizzler und QuerySelectorAll

Beliebte Antwort

Es scheint, dass QuerySelectorAll nicht wirklich ein Teil von HtmlNode ist , aber da dies der offizielle Beispielcode ist, der wörtlich von der Website übernommen wurde, würde ich erwarten, dass die Entwickler verstehen, wie ihre Bibliothek funktioniert. Ich weiß nicht, was das eigentliche Problem sein könnte.

Du hast Recht mit diesem Teil. Obwohl Sie mit dem zweiten Teil nicht korrekt sind, da der Autor von HAP nicht der Autor von FizzlerEx ist. Das Problem ist woanders. Wenn Sie sich den Fehler ansehen, erhalten Sie den einzigen Hinweis, den Sie benötigen, um das Problem zu lösen.

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

Also, was bekommen wir? Es sagt uns, dass es keine Methode namens QuerySelectorAll in der Klasse HtmlNode im Namespace HtmlAgilityPack . Wenn wir uns den Quellcode von HAP ansehen, können Sie leicht feststellen, dass die Fehlermeldung tatsächlich korrekt ist, da es in der Klasse, nach der wir suchen, keine Methode dieses Namens gibt.

Quellcode für HtmlAgilityPack.HtmlNode - Klasse

Wo ist diese Methode, die wir verwenden möchten, aber nicht finden können?

Es ist hier , in der Fizzler.Systems.HtmlAgilityPack.HtmlNodeSelection Klasse.

Nachdem ich ein paar Dinge ausprobiert habe, funktioniert der Code genau so, wie er ist. Das Problem waren die Erweiterungen in der Referenz zwischen Fizzler und HAP-Quellcode.

Wenn Sie Fizzler herunterladen, erhalten Sie HtmlAgilityPack zur gleichen Zeit. Wenn Sie die Verweise in Visual Studio hinzufügen (vorausgesetzt, dass Sie diese verwenden), fügen Sie nur hinzu

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

Reinigen Sie Ihre Lösung und bauen Sie sie neu auf und es sollte funktionieren!



Related

Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow