HTMLAgilityPack Selectnodes renvoie toujours la valeur null

.net c# html html-agility-pack

Question

J'ai entendu de bonnes choses à propos de la bibliothèque HTMLAgilityPack, alors j'ai décidé de l'essayer, mais je n'ai eu aucun succès avec cette bibliothèque. J'essaie de comprendre cela depuis des mois. Quoi que je fasse, je ne peux pas obtenir ce code pour me donner autre chose que null. J'ai essayé de suivre cet exemple ( http://www.c-sharpcorner.com/uploadfile/9b86d4/getting-started-with-html-agility-pack/ ), mais je n'obtiens pas les mêmes résultats et je ne peux pas expliquer pourquoi.

J'essaie de charger le fichier, puis d'exécuter SelectNodes pour sélectionner tous les liens hypertexte, mais la liste retournée est toujours vide. J'ai essayé de sélectionner toutes sortes de nœuds (divs, p, a, tout et n'importe quoi) et il retourne toujours une liste vide. J'ai essayé d'utiliser doc.Descendants, j'ai essayé d'utiliser différents fichiers sources, localement et sur le Web, et rien de ce que je ferais ne renverra un résultat réel.

J'ai dû oublier quelque chose d'important, mais je n'arrive pas à comprendre ce que c'est. Que pourrais-je manquer?

Code:

    public string GetSource()
    {
        try
        {
            string result = "";

            HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
            if (!System.IO.File.Exists("htmldoc.html"))
                throw new Exception("Unable to load doc");

            doc.LoadHtml("htmldoc.html");   // copied locally to bin folder, confirmed it found the file and loaded it

            HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("//a");  // Always returns null, regardless of what I put in here

            if (nodes != null)  
            {
                foreach (HtmlNode item in nodes)
                {
                    result += item.InnerText;
                }
            }
            else
            {
                // Every. Single. Time.
                throw new Exception("No matching nodes found in document");
            }


            return result;
        }
        catch (Exception ex)
        {                
            return ex.ToString();
        }
    }

Le fichier HTML source 'htmldoc.html' que j'utilise ressemble à ceci:

    public string GetSource()
    {
        try
        {
            string result = "";

            HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
            if (!System.IO.File.Exists("htmldoc.html"))
                throw new Exception("Unable to load doc");

            doc.LoadHtml("htmldoc.html");   // copied locally to bin folder, confirmed it found the file and loaded it

            HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("//a");  // Always returns null, regardless of what I put in here

            if (nodes != null)  
            {
                foreach (HtmlNode item in nodes)
                {
                    result += item.InnerText;
                }
            }
            else
            {
                // Every. Single. Time.
                throw new Exception("No matching nodes found in document");
            }


            return result;
        }
        catch (Exception ex)
        {                
            return ex.ToString();
        }
    }

Réponse acceptée

Pour charger un fichier, vous devez utiliser la méthode Load .. LoadHtml est utilisé pour les chaînes contenant du HTML.

doc.Load("htmldoc.html"); 



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