C# 使用HTML敏捷包解析表单

C# 使用HTML敏捷包解析表单,c#,html-agility-pack,C#,Html Agility Pack,我试图从表单中提取所有输入元素。当我解析以下表单时: <form> <input name='test1' type='text'> <input name='test2' type='text'> <input name='test3' type='text'> </form> 谁能告诉我出了什么问题?谢谢我不记得“.Elements()”做了什么,但我假设它只返回子节点。。。在您的情况下,表单的直接子项是divs 您可以使用XPA

我试图从表单中提取所有输入元素。当我解析以下表单时:

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

谁能告诉我出了什么问题?谢谢

我不记得“
.Elements()
”做了什么,但我假设它只返回子节点。。。在您的情况下,表单的直接子项是
divs

您可以使用XPATH进行更多的控制:

.SelectNodes("//form/div/input")
这将返回表单中的输入节点列表,知道输入带有div标记

在这里您可以看到一个示例。

使用
子体()
而不是
元素()
-后者仅适用于直接子元素,但您的输入元素嵌套在div中:

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

HtmlNode.Elements
方法获取与名称匹配的第一代子节点。将输入放入
标记后,它们将成为表单元素的第二代子节点

要使代码正常工作,请使用
HtmlNode.substands
方法,该方法获取具有匹配名称的所有子节点:

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

这里的postForm是什么
 foreach (HtmlAgilityPack.HtmlNode node in postForm.Descendants("input"))
 {
     HtmlAgilityPack.HtmlAttribute valueAttribute = node.Attributes["value"];
 }
foreach (HtmlAgilityPack.HtmlNode node in postForm.Descendants("input"))
{
   HtmlAgilityPack.HtmlAttribute valueAttribute = node.Attributes["value"];
}