2012-06-24 22 views
2
private void button1_Click(object sender, EventArgs e) 
{ 
    string url = urlTextBox.Text; 
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
    HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
    StreamReader sr = new StreamReader(response.GetResponseStream()); 
    richTextBox1.Text = sr.ReadToEnd(); 
    webBrowser1.DocumentText = richTextBox1.Text; 
    HtmlElement htmlElement = webBrowser1.Document.GetElementById("name"); 
    string data = htmlElement.InnerText; 
    label1.Text = data; 
    sr.Close(); 
} 

我想讀php文件的id元素裏面的一些文字,但它在這條線如何從StreamReader的獲取文本在C#

string data = htmlElement.InnerText; 

有問題一點,我從視覺一定的警示Studio 2010中

NullReferenceExpection了未處理不設置到對象的實例
對象引用。

任何人都可以幫我嗎?謝謝:)

+1

您正在收到的錯誤表明沒有ID爲'name'的元素。 – Oded

+2

請參閱@ Smi的答案,並更好地使用[Html Agility Pack](http://htmlagilitypack.codeplex.com/)而不是WebBrowser控件。 –

回答

0

很可能該方法找不到ID爲「name」的元素,因此變量htmlElement爲null。檢查您嘗試獲取的網站是否包含具有該ID的元素。

2

我相信這裏的問題可能是WebBrowser控件異步加載文件。因此,當您嘗試立即訪問webBrowser1.Document時,事情就會出錯。

MSDNDocumentText屬性:

如果設置該屬性的值,然後立即再次檢索,檢索到的價值可能比如果WebBrowser控件還沒有來得及加載設置的值不同新的內容。您可以在DocumentCompleted事件處理程序中檢索新值。或者,您可以通過在循環中調用Thread.Sleep方法來阻止該線程,直到DocumentText屬性返回最初設置爲的值。

另請參閱DocumentCompleted事件。

相關問題