形式:
<form method="POST" name="contactform" action="form-handler.php">
<label for='name'>Name:</label>
<input type="text" name="name" />
<label for='email'>Contact Number:</label>
<input type="text" name="phone" />
<label for='phone'>Email:</label>
<input type="text" name="email" />
<label for='message'>Requirements:</label>
<textarea name="message"></textarea>
<input type="submit" value="Submit" name="submit" class="quoteButton" />
</form>
代码:
HtmlNode.ElementsFlags.Remove("form");
HtmlNodeCollection fromNodes = doc.DocumentNode.SelectNodes("//form");
foreach (HtmlNode formNode in fromNodes)
{
var inputs = formNode.SelectNodes(".//input");
}
“// input”有效,当我检查子路径时,我看到:
/html[1]/body[1]/div[1]/div[3]/div[2]/div[1]/div[1]/input[2]
这意味着,根据HAP,表单甚至不包括输入!
“.// input”选择当前formNode的子节点不起作用(返回null)!
如何解决此问题我添加了以下内容,但它不起作用
HtmlNode.ElementsFlags.Remove("form");
有什么想法吗?
修改(+示例):
在下一个示例中,输入变量也为空。
var doc = new HtmlDocument();
doc.LoadHtml(@"
<!DOCTYPE html>
<html>
<head>
<title>Form Test</title>
</head>
<body>
<form>
<input type=""text"" />
<input type=""reset"" />
<input type=""submit"" />
</form>
</body>
</html>
");
HtmlNode.ElementsFlags.Remove("form");
IEnumerable<HtmlNode> fromNodes = doc.DocumentNode.Descendants("form");
foreach (HtmlNode formNode in fromNodes)
{
var inputs = formNode.SelectNodes(".//input");
}
答案 0 :(得分:2)
解决!
HtmlNode.ElementsFlags.Remove("form");
在加载文档之前应该调用。
我的坏:D