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]");