Синтаксическая форма HTML с Agility Pack - PullRequest
0 голосов
/ 27 марта 2012

Я пытаюсь извлечь все элементы ввода из формы.Когда я анализирую следующую форму:

<form>
<input name='test1' type='text'>
<input name='test2' type='text'>
<input name='test3' type='text'>
</form>

все работает отлично, HTML Agility Pack смог обнаружить элементы ввода в форме, но если он имеет родительский узел div, как показано ниже, он не будет обнаружен.

<form>
<div><input name='test1' type='text'></div>
<div><input name='test2' type='text'></div>
<div><input name='test3' type='text'></div>
</form>

Я использую следующий код

HtmlNode.ElementsFlags.Remove("form");

foreach (HtmlAgilityPack.HtmlNode node in postForm.Elements("input"))
{
    HtmlAgilityPack.HtmlAttribute valueAttribute = node.Attributes["value"];
}

Может кто-нибудь сказать мне, что пошло не так?Спасибо

Ответы [ 3 ]

6 голосов
/ 27 марта 2012

HtmlNode.Elements метод возвращает совпадающие имена дочерних узлов первого поколения. После помещения ваших входных данных в тег <div> они становятся дочерними узлами второго поколения для элемента формы.

Чтобы ваш код работал, используйте метод HtmlNode.Descendants, который получает все узлы-потомки с совпадающим именем:

foreach (HtmlAgilityPack.HtmlNode node in postForm.Descendants("input"))
{
   HtmlAgilityPack.HtmlAttribute valueAttribute = node.Attributes["value"];
}
2 голосов
/ 27 марта 2012

Используйте Descendants() вместо Elements() - последний работает только для прямых потомков, но ваши входные элементы вложены в div:

 foreach (HtmlAgilityPack.HtmlNode node in postForm.Descendants("input"))
 {
     HtmlAgilityPack.HtmlAttribute valueAttribute = node.Attributes["value"];
 }
2 голосов
/ 27 марта 2012

Я не помню, что делает ".Elements()", но я предполагаю, что он просто возвращает дочерние узлы ... и в вашем случае непосредственными дочерними элементами вашей формы являются divs.

Вы можете использовать XPATH, чтобы иметь немного больше контроля:

.SelectNodes("//form/div/input")

Это вернет список входных узлов в форме, зная, что ввод с тегом div.

ЗдесьВы можете увидеть Учебник XPATH с примерами.

...