Obtener campos de un formulario en htmlagilitypack

html-agility-pack

Pregunta

Quiero obtener los datos de un formulario, así que escribí lo siguiente. No funciono

doc.DocumentNode.SelectNodes("//form[@name='F1']//input[@name]");

Romperlo en dos pasos hizo

var node = doc.DocumentNode.SelectSingleNode("//form[@name='F1']");
var nodes = node.SelectNodes("//input[@name]");

Sin embargo, obtengo los datos de todo el archivo html en lugar del nodo / formulario, lo cual es inesperado. ¿Cómo obtengo los resultados de esa forma solamente? Intenté /input[@name] y .//input[@name] que me dio nulo

Respuesta popular

Parece que este es el comportamiento predeterminado para el análisis de etiquetas <form> en Html Agility Pack. Como decían aquí :

FORM se trata de esta manera porque muchas páginas HTML solían tener formularios superpuestos, ya que en realidad era una característica (potente) del HTML original. Ahora que existen XML y XHTML, todos asumen que la superposición es un error, pero no lo es (en HTML 3.2).

Podrías cambiarlo usando:

HtmlNode.ElementsFlags.Remove("form");

y su "//form[@name='F1']//input[@name]" debería funcionar. O cambie la segunda expresión a ".//input[@name]" y también debería funcionar:

var node = doc.DocumentNode.SelectSingleNode("//form[@name='F1']");
var nodes = node.SelectNodes(".//input[@name]");


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué