KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I just wrote up this test to see if I was crazy... 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(); } } } And it outputs: /html[1]/body[1]/form[1] /html[1]/body[1]/input[1] /html[1]/body[1]/input[2] /html[1]/body[1]/input[3] But, if I change <form> to <xxx> it gives me: /html[1]/body[1]/xxx[1] (As it should). So... it looks like those input elements are not contained within the form, but directly within the body, as if the <form> just closed itself off immediately. What's up with that? Is this a bug? Digging through the source, I see: ElementsFlags.Add("form", HtmlElementFlag.CanOverlap | HtmlElementFlag.Empty); It has the "empty" flag, like META and IMG. Why?? Forms are most definitely not supposed to be empty.
Tags (comma-separated)
Save Edits
Cancel