我想得到一個表格的數據,所以我寫下面。它沒有用
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]");