Formular mit HTML Agility Pack analysieren

c# html-agility-pack

Frage

Ich versuche, alle Eingabeelemente aus einem Formular zu extrahieren. Wenn ich das folgende Formular analysiere:

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

Alles funktionierte perfekt, HTML Agility Pack konnte die Eingabeelemente im Formular erkennen, aber wenn es einen Div-Elternknoten wie den folgenden hat, wird er nicht erkannt.

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

Ich verwende den folgenden Code

HtmlNode.ElementsFlags.Remove("form");

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

Kann mir jemand sagen, was schief gelaufen ist? Vielen Dank

Akzeptierte Antwort

HtmlNode.Elements Methode erhält übereinstimmende erste Kindknoten der ersten Generation, die dem Namen entsprechen. Nachdem Sie Ihre Eingaben in ein <div> -Tag eingegeben haben, werden sie zu untergeordneten Knoten der zweiten Generation für das Formularelement.

Damit der Code funktioniert, verwenden Sie die HtmlNode.Descendants Methode, die alle HtmlNode.Descendants Knoten mit dem passenden Namen erhält:

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

Beliebte Antwort

Verwenden Sie Descendants() anstelle von Elements() - das spätere funktioniert nur für direkte Kinder, aber Ihre Eingabeelemente sind verschachtelt in divs:

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



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum