如何在下载后加载页面而不先将其保存到文件中

时间:2013-08-29 14:44:16

标签: c# wpf parsing textbox

我想在网页中解析以下内容:

<h1 class="eTitle">bla bla bla v1.0</h1>

我想在使用WPF创建的文本框中显示“bla bla bla v.1.0”。我的代码是followind,但是当我点击按钮时它在文本框中什么都不显示。

private void Button_Click_1(object sender, RoutedEventArgs e)
    {
           WebClient webClient = new WebClient();
           webClient.Encoding = Encoding.UTF8;
           webClient.DownloadFile("http://blablabla.com", "blabla.htm");

        HtmlDocument htmldoc = new HtmlDocument();
        htmldoc.Load("blabla.htm");
        var titlenode = htmldoc.DocumentNode.SelectSingleNode("blabla");

        textbox1.Text = "" + titlenode;
    }
private void textbox1_TextChanged(object sender, TextChangedEventArgs e)
    {
    }

实际上我将页面保存为.htm文件并从中读取。我可以避免这样做吗?

3 个答案:

答案 0 :(得分:2)

为避免下载文件,您可以使用webClient.DownloadString("http://blablabla.com/blabla.htm");

答案 1 :(得分:1)

您是XPath表达式以获取节点不正确。

如果您想获得单个h1节点,请使用此

var titlenode = htmldoc.DocumentNode.SelectSingleNode("//h1");

如果您想使用标题h1节点获取单个eTitle,请使用此

var titlenode = htmldoc.DocumentNode.SelectSingleNode("//h1[@title = 'eTitle']");

有关详情,请参阅此page

然后你必须访问节点值并显示它。

答案 2 :(得分:0)

为什么不使用HttpWebRequest来提取html文件?

来源:Get html source of web page using HttpWebRequest class

private string getHtml(string url)
{
    if(String.IsNullOrWhiteSpace(url)) { return; }
    // Create Web Request
    HttpWebRequest myWebRequest = (HttpWebRequest)HttpWebRequest.Create(url);
    // Set GET method
    myWebRequest.Method = "GET";
    // Get a response
    HttpWebResponse myWebResponse = (HttpWebResponse)myWebRequest.GetResponse();
    // Open a Stream to read the response
    StreamReader myWebSource = new StreamReader(myWebResponse.GetResponseStream());
    // Create a string to store the response
    string myPageSource = string.Empty;
    myPageSource= myWebSource.ReadToEnd();
    // Close the stream
    myWebResponse.Close();
    // Return the string
    return myPageSource;
}

然后以Google主页为例,致电string htmlPage = getHtml("http://www.google.ca");