HTML Agility Pack问题查找div

时间:2012-06-12 22:12:37

标签: c# html-agility-pack

我正在尝试提取位于具有特定类/ ID名称的div中的所有内容。我正在使用以下代码:

var webGet = new HtmlWeb();
var document = webGet.Load("http://www.4guysfromrolla.com/articles/011211-1.aspx");

var partOfWebpage = from completeWebpage in document.DocumentNode.Descendants("div")
                             where
                                 completeWebpage.Attributes["class"].Value == "content" &&
                                 completeWebpage.Attributes["class"].Value != null
                             select completeWebpage.InnerHtml;

foreach (var s in partOfWebpage)
{
    textBox1.AppendText(s);
}

我收到“NullReferenceException未处理 - 对象引用未设置为对象的实例”错误。

显然它根本找不到div。当我在Descendants()方法中放入“table”而不是“div”时,everthing工作正常,我可以用class / id定义选择一个我选择的表。

我做错了什么?


2 个答案:

答案 0 :(得分:1)

在解除引用之前,请尝试检查属性是否存在:

from completeHomepage in document.DocumentNode.Descendants("div")
where completeHomepage.Attributes["class"] != null &&
      completeHomepage.Attributes["class"].Value == "content" &&
      completeHomepage.Attributes["class"].Value != null
select completeHomepage.InnerHtml;

答案 1 :(得分:0)

您可以使用XPath按类选择div(如果需要,可以使用Id)。

var results = document.DocumentNode.SelectNodes("//div[@class='content']");