Formulaire d'analyse avec HTML Agility Pack

c# html-agility-pack

Question

J'essaie d'extraire tous les éléments d'entrée d'un formulaire. Quand j'analyse le formulaire suivant:

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

Tout fonctionnait parfaitement, HTML Agility Pack était capable de détecter les éléments en entrée du formulaire, mais s'il comporte un nœud div parent comme celui-ci, il ne sera pas détecté.

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

J'utilise le code suivant

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

Quelqu'un peut-il me dire ce qui s'est mal passé? Merci

Réponse acceptée

HtmlNode.Elements méthode HtmlNode.Elements obtient le nom correspondant aux nœuds enfants de première génération. Une fois que vous avez placé vos entrées dans une <div> elles deviennent les nœuds enfants de deuxième génération pour l'élément de formulaire.

Pour que votre code fonctionne, utilisez la méthode HtmlNode.Descendants qui obtient tous les nœuds descendants avec le nom correspondant:

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

Réponse populaire

Utilisez Descendants() au lieu de Elements() - le dernier ne fonctionne que sur les enfants directs mais vos éléments d’entrée sont imbriqués dans les divs:

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



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi