HTMLAgilityPack Selectnodes restituisce sempre null

.net c# html html-agility-pack

Domanda

Ho sentito cose positive sulla libreria HTMLAgilityPack, quindi ho pensato di fare un tentativo ma non ho avuto assolutamente successo con esso. Ho cercato di capirlo per mesi. Non importa quello che faccio, non posso ottenere questo codice per darmi qualcosa di diverso da null. Ho provato a seguire questo esempio ( http://www.c-sharpcorner.com/uploadfile/9b86d4/getting-started-with-html-agility-pack/ ), ma non ottengo gli stessi risultati e non so spiegare perché.

Provo a caricare il file e quindi a eseguire SelectNodes per selezionare tutti i collegamenti ipertestuali, ma restituisce sempre una lista vuota. Ho provato a selezionare tutti i tipi di nodi (div, p, a, tutto e qualsiasi cosa) e restituisce sempre una lista vuota. Ho provato a utilizzare doc.Descendants, ho provato a utilizzare diversi file di origine, localmente e sul Web e nulla di ciò che faccio restituirà mai un risultato reale.

Devo aver trascurato qualcosa di importante, ma non riesco a capire di cosa si tratta. Cosa potevo mancare?

Codice:

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

Il file HTML di origine "htmldoc.html" che sto utilizzando è simile al seguente:

<html>  
<head>  
    <title>Testing HTML Agility Pack</title>
</head>  
<body>  
    <div id="div1">  
        <a href="div1-a1">Link 1 inside div1</a>  
        <a href="div1-a2">Link 2 inside div1</a>  
    </div>  
        <a href="a3">Link 3 outside all divs</a>      
        <div id="div2">  
        <a href="div2-a1">Link 1 inside div2</a>  
        <a href="div2-a2">Link 2 inside div2</a>  
    </div>  
</body>  
</html>

Risposta accettata

Per caricare un file devi utilizzare il metodo Load . LoadHtml viene utilizzato per le stringhe contenenti html

doc.Load("htmldoc.html"); 


Related

Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché