Ich versuche mit HtmlAgilityPack mithilfe von SelectNodes
Screen Scraping SelectNodes
und einige Werte von jedem Knoten zurückzugeben
Hier ist der Code
private readonly HtmlDocument _document = new HtmlDocument();
public void ParseValues(string html)
{
_document.LoadHtml(html);
var tables = _document.DocumentNode.SelectNodes("//table");
foreach (var table in tables)
{
_document.LoadHtml(table.OuterHtml);
var value = _document.DocumentNode.SelectSingleNode("//tbody[1]/tr/td[0]");
}
}
Aber ich habe festgestellt, dass beim Suchen von Kindern innerhalb der foreach-Schleife tatsächlich von der Dokumentwurzel aus gesucht wird. Etwas, das wirklich nervt.
Fragen:
Gibt es eine Möglichkeit, die Werte aus jeder von SelectNodes
Tabelle SelectNodes
ohne eine neue Dokumentinstanz aus dem HtmlDocument
erstellen zu HtmlDocument
?
Gibt es eine Möglichkeit, HtmlDocument
zu disponieren, weil ich jedes Mal, wenn ich _document.LoadHtml(html)
, ein Speicherleck _document.LoadHtml(html)
;
(Für eine detailliertere Erklärung siehe Html Agility Pack - Problem beim Auswählen des Unterknotens )
Sie müssen kein anderes HtmlDocument
Objekt erstellen oder einen anderen HTML- HtmlDocument
laden. Sie müssen nur tun:
foreach (var table in tables)
{
var value = table.SelectSingleNode(".//tbody[1]/tr/td[0]");
}
Der Schlüssel ist die Verwendung von .//tbody
anstelle von //tbody
.