Sto cercando di estrarre tutto ciò che risiede in un div con un nome di classe / id. Sto usando il seguente codice:
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);
}
Sto ricevendo un errore "NullReferenceException non gestito - Riferimento oggetto non impostato su un'istanza di un oggetto" .
Apparentemente non trova affatto il div. Quando metto "table" al posto di "div" nel metodo Descendants (), tutto funziona bene e sono in grado di scegliere una tabella di mia scelta con la definizione id / class.
Che cosa sto facendo di sbagliato?
Prova a verificare se l'attributo esiste prima di dereferenziarlo:
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;
Puoi usare XPath per selezionare il div per classe (o per Id se ne hai bisogno).
var results = document.DocumentNode.SelectNodes("//div[@class='content']");