【问题标题】:HtmlAgilityPack returns nullHtmlAgilityPack 返回 null
【发布时间】:2014-05-30 20:29:58
【问题描述】:

我有一个由 HtmlAgilityPack 编码的程序,但它不能正常工作。 Url 和节点是正确的。但它有一个错误,它指的是foreach。

错误是

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

它以前工作过。我删除了 HtmlAgilityPack dll 并再次添加它。但不起作用。 我需要访问标签的href。

我的代码是:

string source = wc.DownloadString("http://example.com");

HtmlAgilityPack.HtmlDocument document = new HtmlAgilityPack.HtmlDocument();
document.LoadHtml(source);
foreach (HtmlNode div in 
         document.DocumentNode.SelectNodes("//div[@class='test']/a"))
{
//do something
}

【问题讨论】:

  • SelectNodes 如果找不到节点,则返回 null。您必须将 SelectNodes 函数的结果分配给某个变量并检查它是否为空。您可以查看HtmlAgilityPack DocumentNode.SelectNodes returns null, shouldn't 问题。如果它以前工作过 - 那么可能 HTML 结构已更改,因此您需要编写新的 XPath 表达式。
  • 它不起作用。并且 HTML 结构没有改变
  • 它会抛出同样的异常吗?添加完整的异常详细信息。
  • 添加支票if (document.DocumentNode != null)

标签: winforms c#-4.0 html-agility-pack


【解决方案1】:

感谢Ulugbek Umirov,这是您的代码带有空引用检查:

string source = wc.DownloadString("http://example.com");

HtmlAgilityPack.HtmlDocument document = new HtmlAgilityPack.HtmlDocument();
document.LoadHtml(source);

var documentNode = document.DocumentNode;
if ( documentNode!=null )
{
    var nodes = documentNode.SelectNodes("//div[@class='test']/a");
    if ( nodes!=null )
    {
        foreach (HtmlNode div in nodes)
        {
            // Do something...
        }
    }
}

【讨论】:

  • 没有任何作用
猜你喜欢
  • 2017-05-20
  • 1970-01-01
  • 1970-01-01
  • 2013-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-17
  • 1970-01-01
相关资源
最近更新 更多