从htmlagilitypack中的表单中获取字段

时间:2011-11-19 01:54:30

标签: html-agility-pack

我想获取表单的数据,所以我写了下面的内容。它没有工作

doc.DocumentNode.SelectNodes("//form[@name='F1']//input[@name]");

将其分解为两个步骤

var node = doc.DocumentNode.SelectSingleNode("//form[@name='F1']");
var nodes = node.SelectNodes("//input[@name]");

但是我从整个html文件中获取数据,而不是意外的节点/表单。我如何仅从该表单中获得结果?我尝试/input[@name].//input[@name]给了我空

1 个答案:

答案 0 :(得分:3)

这似乎是Html Agility Pack中<form>标记解析的默认行为。正如他们所说here

  

表格被处理   像这样,因为许多HTML页面曾经有重叠的形式,如   这实际上是原始HTML的一个(强大的)功能。现在那个XML   和XHTML存在,每个人都认为重叠是一个错误,但是   它不是(在HTML 3.2中)。

您可以使用以下方式更改它:

HtmlNode.ElementsFlags.Remove("form");

并且您的"//form[@name='F1']//input[@name]"表达式应该有效。或者将第二个表达式更改为".//input[@name]",它也应该有效:

var node = doc.DocumentNode.SelectSingleNode("//form[@name='F1']");
var nodes = node.SelectNodes(".//input[@name]");