Come dovrei usare HTMLAgilityPack AppendNode?

c# html-agility-pack screen-scraping

Domanda

Ho avuto un vero mal di testa in questa fase di venerdì! Sto cercando di aggiungere un HtmlNode a un altro utilizzando InsertAfter (). Riesco a vedere il nodo refChild con id di breadcrumb quando rpinto alla console, ma continuo a ricevere il seguente errore:

System.ArgumentOutOfRangeException: Node "<div id="breadcrumb"></div>" was not f
ound in the collection
Parameter name: node
   at HtmlAgilityPack.HtmlNodeCollection.get_Item(HtmlNode node)
   at HtmlAgilityPack.HtmlNode.InsertAfter(HtmlNode newChild, HtmlNode refChild)

   at MyHome.Tasks.Tasks.DownloadandStoreContent(KeyValueP
air`2 urlPair, String filePath, HtmlNode HtmlWrapper) in C:\Users\denis\Document
s\Visual Studio 2008\Websites\MyHomeV2\MyHome.Tasks\Tasks.cs:line 81
   at MyHome.Tasks.Tasks.GenerateContent(String scrape
sSwitch, String filePath) in C:\Users\denis\Documents\Visual Studio 2008\Website
s\MyHomeV2\MyHome.Tasks\Tasks.cs:line 27
   at MyHome.Tasks.Program.Main(String[] args) in C:\Users\denis\Documents\Visua
l Studio 2008\Websites\MyHomeV2\MyHome.Tasks\Program.cs:line 87

Il mio codice è:

System.ArgumentOutOfRangeException: Node "<div id="breadcrumb"></div>" was not f
ound in the collection
Parameter name: node
   at HtmlAgilityPack.HtmlNodeCollection.get_Item(HtmlNode node)
   at HtmlAgilityPack.HtmlNode.InsertAfter(HtmlNode newChild, HtmlNode refChild)

   at MyHome.Tasks.Tasks.DownloadandStoreContent(KeyValueP
air`2 urlPair, String filePath, HtmlNode HtmlWrapper) in C:\Users\denis\Document
s\Visual Studio 2008\Websites\MyHomeV2\MyHome.Tasks\Tasks.cs:line 81
   at MyHome.Tasks.Tasks.GenerateContent(String scrape
sSwitch, String filePath) in C:\Users\denis\Documents\Visual Studio 2008\Website
s\MyHomeV2\MyHome.Tasks\Tasks.cs:line 27
   at MyHome.Tasks.Program.Main(String[] args) in C:\Users\denis\Documents\Visua
l Studio 2008\Websites\MyHomeV2\MyHome.Tasks\Program.cs:line 87

E come detto ho stampato sia HtmlWrapper che HtmlWrapper.SelectSingleNode ("// div [@ id = 'breadcrumb']") alla console e può vedere il nodo sullo schermo. Qualche idea su dove sto andando male qui?

Grazie, Denis

Risposta accettata

Da un esame molto superficiale della sorgente, sembra che InsertAfter voglia refChild essere un figlio diretto del nodo su cui invochi InsertAfter . Dato che stai cercando l'intero asse discendente (con // ) per il tuo nodo div , è possibile che il nodo reale passato come refChild non sia figlio diretto di HtmlWrapper .

Prova a tirare HtmlWrapper.SelectSingleNode("//div[@id='breadcrumb']") in una variabile e quindi richiamando InsertAfter sul suo ParentNode .




Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché