Получить поля из формы в htmlagilitypack - PullRequest
0 голосов
/ 19 ноября 2011

Я хочу получить данные для формы, поэтому я написал ниже.Это не сработало

doc.DocumentNode.SelectNodes("//form[@name='F1']//input[@name]");

Разделение его на два шага сделало

var node = doc.DocumentNode.SelectSingleNode("//form[@name='F1']");
var nodes = node.SelectNodes("//input[@name]");

Однако я получаю данные из всего html-файла, а не из узла / формы, что является неожиданным.Как я могу получить результаты только из этой формы?Я пробовал /input[@name] и .//input[@name], которые дали мне ноль

1 Ответ

3 голосов
/ 22 декабря 2011

Кажется, что это поведение по умолчанию для разбора тега <form> в Html Agility Pack. Как они сказали здесь :

ФОРМА лечится как это потому, что многие HTML-страницы имели перекрывающиеся формы, как на самом деле это была (мощная) особенность оригинального HTML. Теперь, когда XML и XHTML существуют, все предполагают, что перекрытие является ошибкой, но это не так (в HTML 3.2).

Вы можете изменить его, используя:

HtmlNode.ElementsFlags.Remove("form");

и ваше выражение "//form[@name='F1']//input[@name]" должно работать. Или измените второе выражение на ".//input[@name]", и оно также должно работать:

var node = doc.DocumentNode.SelectSingleNode("//form[@name='F1']");
var nodes = node.SelectNodes(".//input[@name]");
...