Holen Sie Felder aus einem Formular in htmlagilitypack

html-agility-pack

Frage

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

Beliebte Antwort

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]");


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