// div [@ id ='resultStats']“错误

时间:2012-02-28 01:19:07

标签: c# xpath html-agility-pack

我想将谷歌搜索结果作为div。但我采取错误“对象引用未设置为对象的实例。”

我的代码:

var doc = new HtmlWeb().Load("http://www.google.com/search?q=love");
var div = doc.DocumentNode.SelectSingleNode("//div[@id='resultStats']");
var text = div.InnerHtml.ToString();         <---    this line
textBox1.Text = div.ToString();
var matches = Regex.Matches(text, @"About ([0-9,]+) ");
var total = matches[0].Groups[1].Value;

我试试这段代码:

int counter = 0;
HtmlWeb hw = new HtmlWeb();
HtmlAgilityPack.HtmlDocument doc = hw.Load("http://www.google.com/search?q=love");
foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]"))
{
    counter = counter + 1;
}
MessageBox.Show(counter.ToString());

我在消息框中看到了97。

但是我尝试了这段代码:

HtmlWeb hw = new HtmlWeb();
HtmlAgilityPack.HtmlDocument doc = hw.Load("http://www.google.com/search?q=love");
foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]"))
{
    MessageBox.Show(link.ToString());
}

我在消息框中看到“HtmlAgiliytPack.HtmlNode”97次。

1 个答案:

答案 0 :(得分:0)

第一个错误是因为加载的HTML不包含带有<div>的{​​{1}}元素。这就是为什么您的id='resultStats'变量为div,因此null会为您提供div.InnerHtml

关于第二个问题:通过使用NullReferenceException,您调用link.ToString()类型.ToString()的变量方法似乎没有重载,只返回一个短类型名称。我怀疑你想输出链接节点本身。要执行此操作,只需在链接上使用HtmlNode属性:

.OuterHtml

<小时/> 请注意:MessageBox.Show(link.OuterHtml); 属性属于HtmlNode.InnerHtml类型,因此此处不需要在string类型上调用ToString()方法。