Ho appena scritto questa prova per vedere se ero pazzo ...HtmlAgilityPack - Lo <form> si chiude per qualche 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();
}
}
}
Ed uscite:
/html[1]/body[1]/form[1]
/html[1]/body[1]/input[1]
/html[1]/body[1]/input[2]
/html[1]/body[1]/input[3]
Ma, se cambio <form>
-<xxx>
mi dà:
/html[1]/body[1]/xxx[1]
(come dovrebbe). Quindi ... sembra che quegli elementi di input siano non contenuti nel modulo, ma direttamente all'interno del corpo, come se lo <form>
si chiudesse immediatamente da solo. Cosa succede con quello? è un insetto?
Scavando attraverso la sorgente, mi vedi:
ElementsFlags.Add("form", HtmlElementFlag.CanOverlap | HtmlElementFlag.Empty);
Ha il flag "vuoto", come META e IMG. Perché?? Le forme sono sicuramente non supposte essere vuote.
Per curiosità, si comporta ancora così se si dà al modulo un'azione e un metodo? –
@Marc: Anche a me è venuto in mente questo pensiero, e sì, si comporta ancora in questo modo. – mpen
@Mark - * suona * come potrebbe essere un bug allora ... certamente * sembra contrario alle aspettative. –