我应该如何使用 HTMLAgilityPack AppendNode?
周五这个阶段真是头疼!我正在尝试使用 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']") 到控制台并可以在屏幕上看到该节点。关于我在这里出错的地方有什么想法吗?
谢谢, 丹尼斯
Got a real headache at this stage on a Friday! I'm trying to add a HtmlNode to another using InsertAfter(). I can see the refChild node with id of breadcrumbs when I rpint it to the console but keep getting the following error:
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
My code is:
HtmlWrapper.InsertAfter(ContentNode, HtmlWrapper.SelectSingleNode("//div[@id='breadcrumb']"));
And as mentioned I have printed out both HtmlWrapper and HtmlWrapper.SelectSingleNode("//div[@id='breadcrumb']") to the console and can see the node on the screen. Any ideas on where I'm going wrong here?
Thanks,
Denis
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
从对源代码的粗略检查来看,
InsertAfter
似乎希望refChild
成为您调用InsertAfter 的节点的直接子节点上。由于您正在搜索
div
节点的整个后代轴(使用//
),因此您作为refChild
传递的实际节点可能是不是HtmlWrapper
的直接子。尝试将
HtmlWrapper.SelectSingleNode("//div[@id='breadcrumb']")
拉入变量,然后在其ParentNode
上调用InsertAfter
代码>.From a very cursory examination of the source, it looks like
InsertAfter
wantsrefChild
to be a direct child of the node you invokeInsertAfter
on. Since you are searching the entire descendant axis (with//
) for yourdiv
node, it's possible that the actual node you pass asrefChild
isn't a direct child ofHtmlWrapper
.Try pulling
HtmlWrapper.SelectSingleNode("//div[@id='breadcrumb']")
into a variable, and then invokingInsertAfter
on itsParentNode
.