C # / Html Errore del pacchetto di agilità "Il valore non può essere nullo. Nome parametro: Origine."

c#-4.0 html-agility-pack

Domanda

Ho già usato il pacchetto di agilità html e ho ottenuto buoni risultati con un po 'di tentativi ed errori. Attualmente sto cercando di usarlo per restituire un set di nodi con un percorso x che ottengo facendo clic con il pulsante destro del mouse su "Copia XPath" in Firefox. Ho fatto qualche ricerca, e vedo che il browser spesso aggiunge "tbody" per i tag tabella. L'ho provato eliminando questo senza fortuna. Ecco l'xpath che mi è stato dato da Firefox:

/html/body/p[3]/table/tbody/tr/td/table/tbody/tr[3]

Usandolo as- si genera l'errore: "Il valore non può essere nullo. Nome del parametro: source. "

Ciò si verifica online:

nodeList = htmlDoc.DocumentNode.SelectNodes("/html/body/p[3]/table/tbody/tr/td/table/tbody/tr[3]").ToList();

Continuerò a leggere, nel frattempo se questa è una soluzione facile per chiunque, apprezzerei un suggerimento.

Aggiornamento: questo è il codice attuale:

protected override List<IDataPoint> ReturnDataPointsFromIndividualAddressString(string AddressString)
{
       List<IDataPoint> earningsAnnouncements = new List<IDataPoint>(); //Not used, yet..

       HtmlWeb hwObject = new HtmlWeb();
       HtmlDocument htmlDoc = hwObject.Load(AddressString);

       if (htmlDoc.DocumentNode != null)
       {
               List<HtmlNode> nodeList = new List<HtmlNode>();
               nodeList = htmlDoc.DocumentNode.SelectNodes("/html/body/p[3]/table/tbody/tr/td/table/tbody/tr[3]").ToList();
       }
}

Risposta popolare

Sembra che questo errore si verifichi su questa linea:

nodeList = htmlDoc.DocumentNode.SelectNodes("/html/body/p[3]/table/tbody/tr/td/table/tbody/tr[3]").ToList();

Il fatto è che se il metodo SelectNodes non trova nodi dall'espressione xpath, restituisce null . È possibile trovare ulteriori informazioni in questa risposta a una domanda simile Riferimento NULL HTML Agility Pack . Quindi si chiama un metodo ToList() su un oggetto null che causa effettivamente NullReferenceException .

Per evitare questo controlla la variabile contro null questo modo:

var nodes = htmlDoc.DocumentNode.SelectNodes(...);
if (nodes != null)
{
     nodeList = nodes.ToList();
}



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é