Как я должен использовать HTMLAgilityPack AppendNode? - PullRequest
6 голосов
/ 22 января 2010

На этой стадии в пятницу начались головные боли! Я пытаюсь добавить HtmlNode в другой с помощью InsertAfter (). Я могу увидеть узел refChild с идентификатором хлебных крошек, когда я распечатываю его на консоли, но продолжаю получать следующую ошибку:

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

Мой код:

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

И, как уже упоминалось, я распечатал HtmlWrapper и HtmlWrapper.SelectSingleNode ("// div [@ id = 'breadcrumb']") на консоль и вижу узел на экране. Любые идеи о том, где я иду не так?

Спасибо, Denis

1 Ответ

7 голосов
/ 22 января 2010

Из очень беглого изучения источника, похоже, что InsertAfter хочет, чтобы refChild был прямым дочерним узлом, на котором вы вызываете InsertAfter. Поскольку вы ищете всю нисходящую ось (с //) для вашего div узла, вполне возможно, что фактический узел, который вы передаете как refChild, не является прямым потомком из HtmlWrapper.

Попробуйте вставить HtmlWrapper.SelectSingleNode("//div[@id='breadcrumb']") в переменную, а затем вызвать InsertAfter для ее ParentNode.

...