2012-07-19 16 views
0

爲什麼不用這個代碼返回通用列表中的任何id。該網頁在div元素中肯定有ID。如果我斷點了,那麼在DocumentNode.SelectNodeshtmlDoc.DocumentNode.SelectNodes("//div[@id]")屬性Id中沒有ID不起作用。我正在使用.NET 2.0和HtmlAgilityPack.dll 1.4.0.0。html敏捷包不會返回任何ids,即使該頁面有ids?

Imports HtmlAgilityPack 

Partial Class _Default 
    Inherits System.Web.UI.Page 

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
     Dim listHtmlFound As List(Of String) = New List(Of String) 
     Dim webGet As HtmlWeb = New HtmlWeb 
     Dim htmlDoc As HtmlDocument = webGet.Load("http://stackoverflow.com/q/11528387/1350308") 
     htmlDoc.OptionUseIdAttribute = True 
     'Dim s As Object = htmlDoc.DocumentNode.SelectNodes("//div/@id").Count 
     For Each div As HtmlNode In htmlDoc.DocumentNode.SelectNodes("//div") 
      listHtmlFound.Add(div.Id) 
     Next 
    End Sub 
End Class 
+0

你需要更具體。在循環內是否有'div.Id'返回null的問題?或者是'SelectNodes'返回一個空列表的問題,所以它永遠不會進入循環? – 2012-07-19 13:34:16

+0

抱歉 - SelectNodes沒有任何id值 – 2012-07-19 13:40:10

+0

因此,'htmlDoc.DocumentNode.SelectNodes(「// div/@ id」)。Count'爲零? – 2012-07-19 13:41:15

回答

1

你不需要這樣的:

htmlDoc.DocumentNode.SelectNodes("//div[@id]") 

選擇具有id屬性的所有<div>節點,而不是所有id屬性本身?

編輯
如果HtmlNodeId屬性不起作用,你總是可以使用Attributes屬性:遍歷,要找到一個與Name = "id"和使用它的Value

+0

Nope它不起作用 - 即使我斷點並停止並檢查htmlDoc.DocumentNode,但在id屬性中沒有值 – 2012-07-19 13:17:01

+1

文檔說明:「該文檔必須已經使用OptionUseIdAttribute設置爲true進行了解析」。被填補。 – 2012-07-19 13:23:14

+0

仍然不起作用 – 2012-07-19 13:40:28