acabo redactó esta prueba para ver si yo estaba loco ...HtmlAgilityPack - ¿Se cierra el <form> por algún motivo?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using HtmlAgilityPack;
namespace HtmlAgilityPackFormBug
{
class Program
{
static void Main(string[] args)
{
var doc = new HtmlDocument();
doc.LoadHtml(@"
<!DOCTYPE html>
<html>
<head>
<title>Form Test</title>
</head>
<body>
<form>
<input type=""text"" />
<input type=""reset"" />
<input type=""submit"" />
</form>
</body>
</html>
");
var body = doc.DocumentNode.SelectSingleNode("//body");
foreach (var node in body.ChildNodes.Where(n => n.NodeType == HtmlNodeType.Element))
Console.WriteLine(node.XPath);
Console.ReadLine();
}
}
}
Y SALIDAS:
/html[1]/body[1]/form[1]
/html[1]/body[1]/input[1]
/html[1]/body[1]/input[2]
/html[1]/body[1]/input[3]
Pero, si cambio <form>
-<xxx>
me da:
/html[1]/body[1]/xxx[1]
(Como debería). Entonces ... parece que esos elementos de entrada son no contenidos en el formulario, pero directamente dentro del cuerpo, como si el <form>
se hubiera cerrado inmediatamente. ¿Que pasa con eso? ¿Es esto un error?
de excavación a través de la fuente, veo:
ElementsFlags.Add("form", HtmlElementFlag.CanOverlap | HtmlElementFlag.Empty);
Tiene la bandera de "vacío", como META e IMG. ¿¿Por qué?? Los formularios son definitivamente no supuestamente vacíos.
Por curiosidad, ¿todavía se comporta así si le das a la forma una acción y un método? –
@Marc: Ese pensamiento también se me ocurrió, y sí, todavía se comporta de esa manera. – mpen
@Mark - suena * como si fuera un error, entonces ... ciertamente * parece contrario a las expectativas. –