我想获取表单的数据,所以我写了下面的内容。它没有工作
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]
给了我空
答案 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]");