7

在星期五的这个阶段真的很头疼!我正在尝试使用 InsertAfter() 将 HtmlNode 添加到另一个。当我将其 rpint 到控制台时,我可以看到带有面包屑 ID 的 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']") 打印到控制台,并且可以在屏幕上看到该节点。关于我在哪里出错的任何想法?

谢谢,丹尼斯

4

1 回答 1

9

从对源的非常粗略的检查来看,它看起来InsertAfter想要refChild成为您调用的节点的直接子节点InsertAfter。由于您正在为节点搜索整个后代轴(使用//) ,因此您传递的实际div节点可能refChild不是.HtmlWrapper

尝试拉HtmlWrapper.SelectSingleNode("//div[@id='breadcrumb']")入一个变量,然后调用InsertAfter它的ParentNode.

于 2010-01-22T15:56:11.933 回答