Это не будет «исправлением», так как оно разработано, настраивается кодом и открытым исходным кодом. Это может / будет серьезным изменением.

сто написал этот тест, чтобы увидеть, сошел ли я с ума ...

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();
        }
    }
}

И это выводит:

/html[1]/body[1]/form[1]
/html[1]/body[1]/input[1]
/html[1]/body[1]/input[2]
/html[1]/body[1]/input[3]

Но если я изменю<form> в<xxx> это дает мне:

/html[1]/body[1]/xxx[1]

(Как это должно). Итак ... похоже, что эти элементы вводане содержится внутри формы, но непосредственно внутри тела, как если бы<form> просто закрыл себя немедленно. Что с этим? Это ошибка?

Копаясь в источнике, я вижу:

ElementsFlags.Add("form", HtmlElementFlag.CanOverlap | HtmlElementFlag.Empty);

Он имеет «пустой» флаг, как META и IMG. Зачем?? Формы наиболее определенноне должен быть пустым.

Ответы на вопрос(2)

Ваш ответ на вопрос