C # / Html Agility Pack-Fehler "Wert kann nicht null sein. Parametername: Quelle."

c#-4.0 html-agility-pack

Frage

Ich habe html agility pack zuvor verwendet und hatte gute Ergebnisse mit ein wenig Versuch und Irrtum. Ich versuche gerade, es zu verwenden, um einen Knotensatz mit einem XPath zurückzugeben, den ich bekomme, indem ich in Firefox mit der rechten Maustaste auf "XPath kopieren" klicke. Ich habe etwas gesucht, und ich sehe, dass der Browser oft "tbody" für Tabellen-Tags hinzufügt. Ich versuchte es mit dem Entfernen ohne Glück. Hier ist der XPath, der mir von Firefox gegeben wurde:

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

Wenn Sie es verwenden, wird der Fehler: " Wert kann nicht null sein. Parametername: source. "

Dies geschieht online:

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

Ich werde weiterhin lesen, in der Zwischenzeit, wenn dies eine einfache Lösung für jedermann ist, würde ich mich über einen Tipp freuen.

Update: Das ist der eigentliche Code:

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

Beliebte Antwort

Es scheint, dass dieser Fehler in dieser Zeile auftritt:

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

Die Sache ist, wenn die SelectNodes Methode Knoten nicht nach xpath-Ausdruck findet, der übergeben wird, gibt sie null . Sie können weitere Informationen in dieser Antwort auf eine ähnliche Frage HTML Agility Pack Null Referenz finden . Und dann rufen Sie eine ToList() Methode für ein null Objekt auf, das tatsächlich eine NullReferenceException .

Um dies zu vermeiden, überprüfen Sie die Variable wie folgt auf null :

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


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