【问题标题】:How to get text from StreamReader in C#如何在 C# 中从 StreamReader 获取文本
【发布时间】:2012-06-24 17:21:06
【问题描述】:
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 元素中读取一些文本,但是在这一行有点问题

string data = htmlElement.InnerText;

我收到了来自 Visual Studio 2010 的警告

NullReferenceExpection 未处理
对象引用未设置为对象的实例。

谁能帮帮我?谢谢你:)

【问题讨论】:

  • 您收到的错误表明没有 ID 为 name 的元素。
  • 查看@Smi 的回答并更好地使用Html Agility Pack 而不是WebBrowser 控件。

标签: c# .net visual-studio-2010 winapp


【解决方案1】:

我相信这里的问题可能是WebBrowser 控件异步加载文档。因此,当您尝试立即访问 webBrowser1.Document 时,就会出错。

DocumentText 来自MSDN 的属性:

如果您设置了此属性的值,然后立即再次检索它,如果 WebBrowser 控件没有时间加载新内容,则检索到的值可能与设置的值不同。您可以在 DocumentCompleted 事件处理程序中检索新值。或者,您可以通过在循环中调用 Thread.Sleep 方法来阻止线程直到加载文档,直到 DocumentText 属性返回您最初设置的值。

另见DocumentCompleted事件。

【讨论】:

    【解决方案2】:

    该方法很可能找不到 ID 为“name”的元素,因此变量 htmlElement 为空。检查您尝试获取的网站是否包含具有该 ID 的元素。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-03
      • 2017-02-12
      • 2013-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-20
      相关资源
      最近更新 更多