Ich möchte die Daten für ein Formular bekommen, also schrieb ich das unten. Es hat nicht funktioniert
doc.DocumentNode.SelectNodes("//form[@name='F1']//input[@name]");
Es in zwei Schritte aufzuteilen
var node = doc.DocumentNode.SelectSingleNode("//form[@name='F1']");
var nodes = node.SelectNodes("//input[@name]");
Allerdings bekomme ich die Daten aus der gesamten HTML-Datei und nicht den Knoten / Formular, was unerwartet ist. Wie bekomme ich nur die Ergebnisse von diesem Formular? Ich habe versucht /input[@name]
und .//input[@name]
was mir null gegeben hat
Es scheint, dass dies das Standardverhalten für das <form>
-Tag-Parsing in Html Agility Pack ist. Wie sie hier sagten:
FORM wird so behandelt, weil viele HTML-Seiten überlappende Formulare enthielten, da dies tatsächlich eine (leistungsstarke) Funktion des ursprünglichen HTML war. Nun, da XML und XHTML existieren, nimmt jeder an, dass Überlappung ein Fehler ist, aber es ist nicht (in HTML 3.2).
Sie können es ändern, indem Sie Folgendes verwenden:
HtmlNode.ElementsFlags.Remove("form");
und der Ausdruck "//form[@name='F1']//input[@name]"
sollte funktionieren. Oder ändere den zweiten Ausdruck in ".//input[@name]"
und es sollte auch funktionieren:
var node = doc.DocumentNode.SelectSingleNode("//form[@name='F1']");
var nodes = node.SelectNodes(".//input[@name]");