Modulo di analisi con HTML Agility Pack

c# html-agility-pack

Domanda

Sto cercando di estrarre tutti gli elementi di input da un modulo. Quando analizzo il seguente modulo:

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

tutto ha funzionato perfettamente, HTML Agility Pack è stato in grado di rilevare gli elementi di input nel modulo, ma se ha un nodo genitore div come il seguente, non verrà rilevato.

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

Sto usando il seguente codice

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

Qualcuno può dirmi cosa è andato storto? Grazie

Risposta accettata

HtmlNode.Elements metodo HtmlNode.Elements ottiene corrispondenti nodi figlio di prima generazione corrispondenti al nome. Dopo aver inserito gli input in un tag <div> diventano i nodi secondari di seconda generazione per l'elemento del modulo.

Per far funzionare il tuo codice usa il metodo HtmlNode.Descendants che ottiene tutti i nodi discendenti con il nome corrispondente:

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

Risposta popolare

Usa Descendants() invece di Elements() - il dopo funziona solo sui bambini diretti, ma i tuoi elementi di input sono annidati all'interno di div:

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



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché