Comment utiliser HTMLAgilityPack AppendNode?

c# html-agility-pack screen-scraping

Question

Vous avez vraiment mal à la tête à ce stade le vendredi! J'essaie d'ajouter un HtmlNode à un autre en utilisant InsertAfter (). Je peux voir le nœud refChild avec l'identifiant de la chapelure lorsque je le réimpressionne sur la console, mais le message d'erreur suivant s'affiche:

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

Mon code est:

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

Et comme mentionné, j'ai imprimé HtmlWrapper et HtmlWrapper.SelectSingleNode ("// div [@ id = 'breadcrumb']") sur la console et peut voir le nœud à l'écran. Des idées sur où je me trompe ici?

Merci Denis

Réponse acceptée

D'après un examen très superficiel de la source, InsertAfter souhaite que refChild soit un enfant direct du noeud sur InsertAfter vous InsertAfter . Puisque vous recherchez l’axe descendant complet (avec // ) pour votre nœud div , il est possible que le nœud que vous passez en tant que refChild ne soit pas un enfant direct de HtmlWrapper .

Essayez d'extraire HtmlWrapper.SelectSingleNode("//div[@id='breadcrumb']") dans une variable, puis d'appeler InsertAfter sur son ParentNode .




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi