用过HtmlAgilityPack 进来下

datahandler2 2014-01-09 03:47:11
头次使用这个东西,想玩玩,就随便以抓园博园首页来测试。。。
代码如下,但发现SelectSignNode单个节点的时候可以正常替换,但换成了下面的多个节点循环替换的时候,结果竟然没法替换,不知道我哪里写错了?


string content="...."//这个变量值等于园博园首页源代码
HtmlDocument document=new HtmlDocument();
document.LoadHtml(content);
content = string.Empty;
HtmlNodeCollection targetNodeCollection = document.DocumentNode.SelectNodes(@"//div[@class='post_item_foot']");
HtmlNode newHtmlNode;
//这里我想将 xpath= //div[@class='post_item_foot'] 的节点全部替换成下面的标签
if (targetNodeCollection != null && targetNodeCollection.Count>0)
{
foreach (var targetNode in targetNodeCollection)
{
newHtmlNode = HtmlNode.CreateNode("<span>replace words</span>");
targetNode.ParentNode.ReplaceChild(newHtmlNode, targetNode);
}
}

content = document.DocumentNode.OuterHtml;
//问题就是循环替换后,为啥content还是一成不变??问题在哪?
...全文
172 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
datahandler2 2014-01-13
  • 打赏
  • 举报
回复
引用 6 楼 anchenyanyue 的回复:
这个还要问么 你对content 根本没做任何操作 怎么会改变呢 只是替换了节点的内容而已
啊~~~那要怎么更改。我的需求是替换html文档中全部某类型节点。。。 我查看了下 ReplaceNode 也就支持document.DocumentNode.ReplaceNode(newHtmlNode,oldHtmlNode)... 但这个是不能用的。。
暗尘掩月 2014-01-13
  • 打赏
  • 举报
回复
这个还要问么 你对content 根本没做任何操作 怎么会改变呢 只是替换了节点的内容而已
datahandler2 2014-01-13
  • 打赏
  • 举报
回复
引用 4 楼 peng2739956 的回复:
很久之前用这个玩意抓过360的手机游戏网,DEMO 要不要? 私信我吧。
Demo不需要,谢谢,看看有没有我要的那个问题解决方法?
peng2739956 2014-01-11
  • 打赏
  • 举报
回复
很久之前用这个玩意抓过360的手机游戏网,DEMO 要不要? 私信我吧。
datahandler2 2014-01-10
  • 打赏
  • 举报
回复
CSDN的大牛少了好多。。。都没人关注下呀~~
datahandler2 2014-01-09
  • 打赏
  • 举报
回复
引用 1 楼 hou306010849 的回复:
[quote=引用 楼主 tiancaolin 的回复:] 头次使用这个东西,想玩玩,就随便以抓园博园首页来测试。。。 代码如下,但发现SelectSignNode单个节点的时候可以正常替换,但换成了下面的多个节点循环替换的时候,结果竟然没法替换,不知道我哪里写错了?

string content="...."//这个变量值等于园博园首页源代码
HtmlDocument document=new HtmlDocument();
document.LoadHtml(content);
content = string.Empty;
HtmlNodeCollection targetNodeCollection = document.DocumentNode.SelectNodes(@"//div[@class='post_item_foot']");  
HtmlNode newHtmlNode;
//这里我想将 xpath= //div[@class='post_item_foot'] 的节点全部替换成下面的标签
if (targetNodeCollection != null && targetNodeCollection.Count>0)
{                   
  foreach (var targetNode in targetNodeCollection)
  {
   newHtmlNode = HtmlNode.CreateNode("<span>replace words</span>");
    targetNode.ParentNode.ReplaceChild(newHtmlNode, targetNode);      
  }
}     

content = document.DocumentNode.OuterHtml;
//问题就是循环替换后,为啥content还是一成不变??问题在哪?
有专门的文档把,你找下被!![/quote] codeplex找不到文档。。
Im_Sorry 2014-01-09
  • 打赏
  • 举报
回复
引用 楼主 tiancaolin 的回复:
头次使用这个东西,想玩玩,就随便以抓园博园首页来测试。。。 代码如下,但发现SelectSignNode单个节点的时候可以正常替换,但换成了下面的多个节点循环替换的时候,结果竟然没法替换,不知道我哪里写错了?

string content="...."//这个变量值等于园博园首页源代码
HtmlDocument document=new HtmlDocument();
document.LoadHtml(content);
content = string.Empty;
HtmlNodeCollection targetNodeCollection = document.DocumentNode.SelectNodes(@"//div[@class='post_item_foot']");  
HtmlNode newHtmlNode;
//这里我想将 xpath= //div[@class='post_item_foot'] 的节点全部替换成下面的标签
if (targetNodeCollection != null && targetNodeCollection.Count>0)
{                   
  foreach (var targetNode in targetNodeCollection)
  {
   newHtmlNode = HtmlNode.CreateNode("<span>replace words</span>");
    targetNode.ParentNode.ReplaceChild(newHtmlNode, targetNode);      
  }
}     

content = document.DocumentNode.OuterHtml;
//问题就是循环替换后,为啥content还是一成不变??问题在哪?
有专门的文档把,你找下被!!

62,025

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧