FizzlerEx / HtmlAgilityPack QuerySelectorTous ne fonctionne pas

c# html-agility-pack

Question

J'ai essayé de configurer FizzlerEx, disponible à l'adresse http://fizzlerex.codeplex.com/ . Après avoir ajouté les références à mon projet, j'ai tenté d'exécuter l'exemple de code donné sur le site Web. L'intégralité de mon code est répertoriée ci-dessous.

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

Cependant, cela génère des erreurs de construction, affirmant que:

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

Il semblerait que QuerySelectorAll ne fasse pas réellement partie de HtmlNode, mais étant donné qu'il s'agit de l'exemple de code officiel pris intégralement du site Web, je m'attendrais à ce que les créateurs comprennent le fonctionnement de leur bibliothèque. Je ne sais pas quel pourrait être le problème.

Un problème connexe semble avoir été trouvé ici, mais aucune réponse appropriée n'a jamais été trouvée: Fizzler et QuerySelectorAll.

Réponse populaire

Il semblerait que QuerySelectorAll ne fasse pas réellement partie de HtmlNode , mais étant donné qu'il s'agit de l'exemple de code officiel pris intégralement du site Web, je m'attendrais à ce que les créateurs comprennent le fonctionnement de leur bibliothèque. Je ne sais pas quel pourrait être le problème.

Vous avez raison à propos de cette partie. Bien que vous n'ayez pas raison sur la deuxième partie, l'auteur de HAP n'est pas l'auteur de FizzlerEx. Le problème est ailleurs. En regardant simplement l'erreur, vous obtenez le seul indice dont vous avez besoin pour résoudre ce problème.

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

Alors, qu'avons-nous? il nous dit qu'il n'y a pas de méthode appelée QuerySelectorAll dans la classe HtmlNode dans l'espace de noms HtmlAgilityPack . Si nous examinons le code source de HAP, vous pourrez facilement déterminer que le message d'erreur est correct, car il n'existe aucune méthode portant ce nom dans la classe que nous recherchons.

Code source pour HtmlAgilityPack.HtmlNode - class

Où est cette méthode que nous voulons utiliser mais que nous ne pouvons pas trouver?

C'est ici , dans la classe Fizzler.Systems.HtmlAgilityPack.HtmlNodeSelection .

Après quelques essais, le code fonctionne parfaitement tel quel. Le problème était lié aux extensions de la référence entre Fizzler et le code source HAP.

Si vous téléchargez Fizzler, vous obtenez HtmlAgilityPack en même temps. Lorsque vous ajoutez les références dans Visual Studio (en supposant que vous les utilisiez), ajoutez uniquement

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

Nettoyez votre solution et reconstruisez-la et cela devrait fonctionner!




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi