2015-07-12 62 views
-2

前檢查當使用HtmlAgilityPack我的代碼是示數出它擊中了障礙之前,我可以實現任何類型的檢查分鐘,例如:沒有時間出錯崩潰

   Dim doc = New HtmlDocument() 
       doc.LoadHtml(sl) 
       Dim searchId = doc.DocumentNode.SelectSingleNode("//input[@name='searchId']").Attributes("value").Value 

當它擊中的這條線(精細加工後)

   Dim searchId = doc.DocumentNode.SelectSingleNode("//input[@name='searchId']").Attributes("value").Value 

我得到的對象沒有設置爲一個參考,我知道這是因爲它沒有看到html代碼此值,我不知道要檢查它不是」最好的辦法t空,所以我可以繼續執行,否則應用程序崩潰。

任何人都可以幫忙嗎?

+0

可能重複(http://stackoverflow.com/questions/4660142/what-is- a-nullreferenceexception-how-do-i-fix-it) – Plutonix

回答

0

你不及格線由分立的財產查找,這裏分離爲清楚起見::

Dim searchId = doc 
       .DocumentNode 
       .SelectSingleNode("//input[@name='searchId']") 
       .Attributes("value") 
       .Value 

如果這些查詢(除.Value)中的任何一個爲空,你會得到你所描述的錯誤。例如,如果沒有匹配的@name='searchId'元素,則.Attributes調用將拋出該錯誤。

爲了防止出現錯誤,您需要分別檢查每個結果,然後嘗試下一次查找。 doc.DocumentNode是不太可能Nothing(假設你的文檔是有效的,正確加載),所以是這樣的:

Dim searchId As String 
If doc.DocumentNode.SelectSingleNode("//input[@name='searchId']") IsNot Nothing Then 
    If doc.DocumentNode.SelectSingleNode("//input[@name='searchId']").Attributes("value") IsNot Nothing Then 
     searchId = singleNode.Attributes("value").Value 
    End If 
End If 

可以縮短代碼,並防止嵌套If通過短路AndAlso運營商。我也想補充一個臨時變量的可讀性:什麼是一個NullReferenceException,如何解決呢]的

Dim searchId As String 
Dim idNode = doc.DocumentNode.SelectSingleNode("//input[@name='searchId']") 

If idNode IsNot Nothing AndAlso idNode.Attributes("value") IsNot Nothing Then 
    searchId = idNode.Attributes("value").Value 
End If 
+0

非常感謝Dan!我對如何解決這個問題總有心理障礙 – graham23s