Вы можете сделать следующее:
HtmlNode.ElementsFlags.Remove("form");
HtmlDocument doc = new HtmlDocument();
doc.Load(@"D:\test.html");
HtmlNode secondForm = doc.GetElementbyId("form2");
foreach (HtmlNode node in secondForm.Elements("input"))
{
HtmlAttribute valueAttribute = node.Attributes["value"];
if (valueAttribute != null)
{
Console.WriteLine(valueAttribute.Value);
}
}
По умолчанию HTML-пакет Agility Pack анализирует формы как пустой узел, поскольку им разрешено перекрывать другие элементы HTML.Первая строка (HtmlNode.ElementsFlags.Remove("form");
) отключает это поведение, позволяя получать элементы ввода во второй форме.
Обновление: Пример перекрытия элементов формы:
<table>
<form>
<!-- Other elements -->
</table>
</form>
Элемент начинается внутри таблицы, но закрывается за пределами элемента таблицы.Это разрешено в спецификации HTML, и HTML Agility Pack должен иметь с ней дело.