那么如何解决HtmlAgilityPack得到的InnerText中有残留的script、样式的问题呢,在google上搜索“HtmlAgilityPack script innerText”找到了stackoverflow上的这篇文章《C#: HtmlAgilityPack extract inner text》

代码如下:

foreach(varscript indoc.DocumentNode.Descendants("script").ToArray())
script.Remove();
foreach(varstyle indoc.DocumentNode.Descendants("style").ToArray())
style.Remove();

stringinnerText = doc.DocumentNode.InnerText;

原来这样简单呀,就是把所有的script、style标签从dom树中去掉(为了解决迭代器在工作时不能从集合中Remove元素的问题,使用ToArray()转换为数组再遍历)。

这样操作发现还是有残留的script:

<!--[ifIE]>
<script language="JavaScript"> varobjmain = document.getElementById("main"); functionupdatesize(){ varbodyw = window.document.body.offsetWidth; varw=(bodyw<=790?"790px":"100%"); objmain.style.width=w; } updatesize(); window.onresize = updatesize; </script>
<![endif]-->

仔细一看原来是带条件注释的script,因此用下面的方法去掉所有的注释节点:

代码如下:

foreach(varscript indoc.DocumentNode.Descendants("script").ToArray())
script.Remove();
foreach(varstyle indoc.DocumentNode.Descendants("style").ToArray())
style.Remove();

foreach(varcomment indoc.DocumentNode.SelectNodes("//comment()").ToArray())
comment.Remove();//新增的代码

stringinnerText = doc.DocumentNode.InnerText;

解释:HtmlAgilityPack是使用XPath语法,"//comment()"在XPath中表示“所有注释节点”,关于XPath的详细用法请参考XPath的资料。

其他可能有用的技术点:
1、获取网页title:doc.DocumentNode.SelectSingleNode("//title").InnerText; 
解释:XPath中“//title”表示所有title节点。SelectSingleNode用于获取满足条件的唯一的节点。

2、获取所有的超链接:doc.DocumentNode.Descendants("a")

3、获取name为kw的input,也就是相当于getElementsByName():
            var kwBox = doc.DocumentNode.SelectSingleNode("//input[@name='kw']");

解释:"//input[@name='kw']"也是XPath的语法,表示:name属性等于kw的input标签。

 XPath 使用路径表达式来选取 XML 文档中的节点或节点集。节点是通过沿着路径 (path) 或者步 (steps) 来选取的。

 nodename:选取此节点的所有子节点。 
 /:从根节点选取。 
 //:从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。 
 .:选取当前节点。 
 ..:选取当前节点的父节点。

参考资料:

http://www.w3school.com.cn/xpath/xpath_syntax.asp 

#c#

2012-09-10 23:30 如何解决HtmlAgilityPack得到的InnerText中有残留的script、样式的问题...相关推荐

  1. [转]如何解决:Android中 Error generating final archive: Debug Certificate expired on 10/09/18 16:30 的错误...

    本文转自:http://www.cnblogs.com/yyangblog/archive/2011/01/07/1929657.html 问题概述: 在导入一个app后提示如下错误: "E ...

  2. 如何解决:Android中 Error generating final archive: Debug Certificate expired on 10/09/18 16:30 的错误...

    问题概述: 在导入一个app后提示如下错误: "Error generating final archive: Debug Certificate expired on 10/09/18 1 ...

  3. 如何通过牛顿方法解决Logistic回归问题 By 机器之心2017年8月09日 16:30 本文介绍了牛顿方法(Newton's Method),以及如何用它来解决 logistic 回归。log

    如何通过牛顿方法解决Logistic回归问题 By 机器之心2017年8月09日 16:30 本文介绍了牛顿方法(Newton's Method),以及如何用它来解决 logistic 回归.logi ...

  4. AI:2020年6月23日北京智源大会演讲分享之AI创业专题论坛——10:00-10:30张亚勤教授《智能产业新浪潮》

    AI:2020年6月23日北京智源大会演讲分享之AI创业专题论坛--10:00-10:30张亚勤教授<智能产业新浪潮> 导读:首先感谢北京智源大会进行主题演讲的各领域顶级教授,博主受益匪浅 ...

  5. 饥荒服务器身份验证错误,windows 2008/2012/2016/10系统远程连接出现身份验证错误解决办法...

    注:每个版本估计有点区别,不过区别不大,我远程连接经常用的几个系统都在下面有解决办法 windows 2008/2012/2016/10系统远程连接,远程桌面连接Window Server时报错信息如 ...

  6. Linux一句话精彩问答--2007/10/23更新

    from:http://linux.chinaunix.net/bbs/viewthread.php?tid=16141&extra= Linux一句话精彩问答--2007/10/23更新 [ ...

  7. 反欺诈技术揭秘-设备指纹VS关系网络模型 此博文包含图片 (2017-05-12 10:23:52)转载▼ 标签: 设备指纹 关系网络 反欺诈 神经网络模型 分类: 风控 文章来源:网络(经整合梳理

    反欺诈技术揭秘-设备指纹VS关系网络模型 (2017-05-12 10:23:52) 转载▼ 标签: 设备指纹 关系网络 反欺诈 神经网络模型 分类: 风控 文章来源:网络(经整合梳理,仅供交流学习使 ...

  8. JAVA月数输入24回车后变成12_Java语言程序设计(一)自考2012年10月真题

    Java语言程序设计(一)自考2012年10月真题及答案解析 本试卷为单选题型,填空题,程序填空题,程序分析题,程序设计等题型. 一.单项选择题在每小题列出的四个备选项中只有一个是符合题目要求的,请将 ...

  9. AstrOrz Player 0.72v 国庆最新版本(2012/09/22)更新无期限版本获取方式!(2013/02/14)

    配合杜比家庭影院v4 Dolby Home Theater v4 和DTS音效可以达到最佳效果! 下载地址:点击打开链接 AstrOrz Player 0.72v (2012/09/22) 1.可以直 ...

最新文章

  1. 大话存储pdf 百度网盘_学用系列亲身体验百度网盘内测在线文档,有遗憾也有期待...
  2. c语言中point的用法_关于C语言Switch语句,先学这些技巧够不够?
  3. pdf 奇数页插入页码_如何在Word 2013中的奇数页码上启动新部分
  4. PHP之MVC项目实战(二)
  5. phpexcel的使用方法详细介绍
  6. Python机器学习:梯度下降法007使用scikit中的随机梯度下降法
  7. 关于使用SharedObject来缓存游戏图片或者swf文件资源到客户端本地的研究
  8. 比波士顿动力快一步:两足机器人送快递,你不用跑出门也能收货了
  9. 即将30岁的2020年总结,放眼未来的未雨绸缪
  10. 关于路由器的一些认识(有些不够严谨)
  11. Like What Y ou Like: Knowledge Distill via Neuron Selectivity Transfer(2017)------论文阅读笔记
  12. 红楼梦人物关系 python_如何用Python来理一理红楼梦里的那些关系
  13. spark.DataFrame离群值处理
  14. Office Professional Plus 2019 下载安装激活
  15. Hystrix服务降级的两种处理方式@HystrixCommand注解和定义统一fallback接口
  16. cp 命令 复制文件及目录
  17. 2021年7月火影几点服务器维护完,火影忍者手游2021年5月27日更新公告
  18. HTML在指定位置画一个矩形,CAD如何在指定位置绘制矩形?
  19. 可重入锁的理解及公平锁和非公平锁的具体实现
  20. linux之用户和组群的管理,Linux的用户和组群管理(7页)-原创力文档

热门文章

  1. CP20常见问题解答
  2. Redis实现广告缓存、并完善缓存击穿
  3. 传承德艺之馨——上海文联第八次代表大会侧记
  4. 【星云测试】精准测试的软件产品质量效率变化分析
  5. webpack学习(1)
  6. Vue项目自动转换 px 为 rem,高保真还原设计图
  7. How to make app start automatically When the application starts
  8. yii2权限控制rbac之rule详细讲解(转)
  9. 关于DataGridViewComboBoxColumn的二三事
  10. NSURL 基本方法 absoluteString