我想在网页中解析以下内容:
<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文件并从中读取。我可以避免这样做吗?
答案 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");