【问题标题】:Get fields from a form in htmlagilitypack从 htmlagilitypack 中的表单获取字段
【发布时间】:2012-02-27 20:21:48
【问题描述】:

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

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-27
      • 2013-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多