为什么这不起作用?我在foreach循环启动时得到一个空引用异常错误
我正在尝试在页面上获取所有div文本并将每个文本放入我自己的集合中
Imports HtmlAgilityPack
Imports System.Xml
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 webGet As HtmlWeb = New HtmlWeb
Dim htmlDoc As HtmlDocument = webGet.Load("http://www.mysite.com")
Dim ids As New List(Of String)()
For Each div As Object In htmlDoc.DocumentNode.SelectNodes("//div")
ids.Add(div.InnerText)
Next
End Sub
End Class
的例外 的
对象引用未设置为对象的实例。描述:一个 在执行当前Web期间发生了未处理的异常 请求。请查看堆栈跟踪以获取有关的更多信息 错误以及它在代码中的起源。
异常详细信息:System.NullReferenceException:不是对象引用 设置为对象的实例。
来源错误:
第12行:Dim id作为新列表(字符串)() 第13行:
第14行:对于每个div作为对象在htmlDoc.DocumentNode.SelectNodes(“// div”)中 第15行:
第16行:ids.Add(div.InnerText)
答案 0 :(得分:1)
您的代码看起来是正确的。也许URL“http://www.mysite.com”没有返回有效的HTML。
以下代码适用:
Imports HtmlAgilityPack
Public Class _Default
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim webGet As HtmlWeb = New HtmlWeb
Dim htmlDoc As HtmlDocument = webGet.Load("http://stackoverflow.com/q/11528387/1350308")
Dim ids As New List(Of String)()
TextBox1.Text = ""
For Each div As HtmlNode In htmlDoc.DocumentNode.SelectNodes("//div")
TextBox1.Text += div.Id + Environment.NewLine
Next
End Sub
End Class
TextBox1中的结果是:
noscript-padding
notify-container
overlay-header
custom-header
header
portalLink
topbar
hlinks
hsearch
hlogo
hmenus
content
question-header
mainbar
question
adzerk1
comments-11528387
answers
answers-header
tabs
answer-11528559
comments-11528559
post-editor
wmd-button-bar
draft-saved
draft-discarded
wmd-preview
sidebar
newuser-box
adzerk2
hireme
feed-link
feed-link-text
prettify-lang
footer
footer-menu
footer-sites
footer-flair
svnrev
copyright
noscript-warning
完整来源:Q11528387WebApp.7z