2010-01-22 5 views
5

Vous avez un vrai mal de tête à ce stade un vendredi! J'essaie d'ajouter un HtmlNode à un autre en utilisant InsertAfter(). Je peux voir le nœud refChild avec id de mie de pain quand je rpint à la console, mais continue à obtenir l'erreur suivante:Comment utiliser HTMLAgilityPack AppendNode?

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:

HtmlWrapper.InsertAfter(ContentNode, HtmlWrapper.SelectSingleNode("//div[@id='breadcrumb']")); 

Et comme mentionné je l'ai imprimé à la fois HtmlWrapper et HtmlWrapper.SelectSingleNode ("// div [@ id = 'breadcrumb']") à la console et peuvent voir le noeud sur l'écran. Des idées sur où je vais mal ici?

Merci, Denis

Répondre

6

D'un examen très sommaire de la source, il semble que InsertAfter veut refChild d'être une directe enfant du nœud que vous invoquez InsertAfter sur. Puisque vous êtes à la recherche l'ensemble de l'axe descendant (avec //) pour votre noeud div, il est possible que le nœud réel que vous passez comme refChild est pas un enfant direct de HtmlWrapper. Essayez d'insérer HtmlWrapper.SelectSingleNode("//div[@id='breadcrumb']") dans une variable, puis d'appeler InsertAfter sur ParentNode.

+0

Cela n'a pas fonctionné au début mais j'ai amené mon sélecteur vers le haut de quelques niveaux et pointait finalement un enfant du noeud HtmlWrapper. Comment saviez-vous qu'il avait besoin d'un enfant spécifiquement et non d'un délinquant? –

+0

@Denis: trouvé la source via un google pour HtmlNodeCollection InsertAfter, remarqué que le membre étant indexé dans a été appelé '_childNodes', deviné :) – AakashM

+1

L'astuce ici est de faire ce qui suit: nodeToInstertBefore.ParentNode.InsertBefore (newNode, nodeToInsertBefore) Pas clair, mais ça marche :) – Philippe

Questions connexes