Html agility pack 从HtmlAlityPack中的表单获取字段

Html agility pack 从HtmlAlityPack中的表单获取字段,html-agility-pack,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文件中获取数据,而不是意外的节点/

我想获取表单的数据,所以我写了以下内容。它不起作用

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]
,这给了我null

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

形式处理 这是因为许多HTML页面过去都有重叠的表单,例如 这实际上是原始HTML的一个(强大的)特性。现在,XML 而且XHTML存在,每个人都认为重叠是一个错误,但是 它不是(在HTML3.2中)

您可以使用以下方法进行更改:

HtmlNode.ElementsFlags.Remove("form");
您的
“//表单[@name='F1']//输入[@name]”
表达式应该可以工作。或者将第二个表达式更改为
“//input[@name]”
,它也应该可以工作:

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

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

形式处理 这是因为许多HTML页面过去都有重叠的表单,例如 这实际上是原始HTML的一个(强大的)特性。现在,XML 而且XHTML存在,每个人都认为重叠是一个错误,但是 它不是(在HTML3.2中)

您可以使用以下方法进行更改:

HtmlNode.ElementsFlags.Remove("form");
您的
“//表单[@name='F1']//输入[@name]”
表达式应该可以工作。或者将第二个表达式更改为
“//input[@name]”
,它也应该可以工作:

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