HTML-Agility-Pack-Nullreferenz

c# html-agility-pack

Frage

Ich habe Probleme mit dem HTML Agility Pack.

Ich erhalte eine Null-Referenz-Ausnahme, wenn ich diese Methode für HTML verwende, das den spezifischen Knoten nicht enthält. Es funktionierte zuerst, aber dann hörte es auf zu arbeiten. Dies ist nur ein Ausschnitt und es gibt ungefähr 10 weitere foreach-Schleifen, die verschiedene Knoten auswählen.

Was mache ich falsch?

public string Export(string html)
{
    var doc = new HtmlDocument();
    doc.LoadHtml(html);
    // exception gets thrown on below line
    foreach (var repeater in doc.DocumentNode.SelectNodes("//table[@class='mceRepeater']"))
    {
        if (repeater != null)
        {
            repeater.Name = "editor:repeater";
            repeater.Attributes.RemoveAll();
        }
    }

    var sw = new StringWriter();
    doc.Save(sw);
    sw.Flush();

    return sw.ToString();
}

Akzeptierte Antwort

AFAIK, DocumentNode.SelectNodes könnte null wenn keine Knoten gefunden werden.

Dies ist das Standardverhalten, siehe Diskussionsthread zu Codeplex: Warum DocumentNode.SelectNodes null zurückgibt

Die Problemumgehung könnte darin bestehen, den foreach Block neu zu schreiben:

var repeaters = doc.DocumentNode.SelectNodes("//table[@class='mceRepeater']");
if (repeaters != null)
{
    foreach (var repeater in repeaters)
    {
        if (repeater != null)
        {
            repeater.Name = "editor:repeater";
            repeater.Attributes.RemoveAll();
        }
    }
}

Beliebte Antwort

Dies wurde aktualisiert und Sie können nun verhindern, dass SelectNodes null doc.OptionEmptyCollection = true indem Sie doc.OptionEmptyCollection = true , wie in diesem GitHub-Problem beschrieben .

Dadurch wird eine leere Auflistung anstelle von null zurückgegeben, wenn keine Knoten vorhanden sind, die mit der Abfrage übereinstimmen (ich bin mir nicht sicher, warum dies nicht das Standardverhalten war).




Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum