Пакет поиска гибкости HTML

c# html-agility-pack

Вопрос

Я пытаюсь извлечь все, что находится внутри 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 вообще. Когда я помещаю «table» вместо «div» в метод Descendants (), все работает отлично, и я могу выбрать таблицу по своему выбору с определением class / id.

Что я делаю не так?


Принятый ответ

Попробуйте проверить, существует ли Атрибут до разыменования его:

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;

Популярные ответы

Вы можете использовать XPath для выбора div по классу (или по идентификатору, если вам нужно).

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


Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow