从htmlagilitypack中的表单中获取字段

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] /input[@name] .//input[@name] ,这给了我null

热门答案

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

FORM被视为这样,因为许多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]");


许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因