http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 4703|回复: 1

[其他] HtmlAgilityPack 可以直接用xpath选取文本型节点吗

[复制链接]
发表于 2014-12-18 00:51:01 | 显示全部楼层 |阅读模式
1金钱
最近在写一个软件,采集下来的html源代码,想过滤后留下所有的文本和图片。并且保存文本和图片的前后关系不变。
学习了站长苏飞的这篇http://www.sufeinet.com/thread-2120-1-1.html 利用HtmlAgilityPack解析元素。
尝试修改帖子中的代码来实现自己的需求,发现报错,详见下面代码中的注视。
[C#] 纯文本查看 复制代码
private void Setxpath(HtmlNode node)
{
foreach (HtmlNode item in node.ChildNodes)
{
if (item.XPath.Contains("#"))
{ ///html[1]/body[1]/div[1]/#text[1]
    string str= hd.DocumentNode.SelectSingleNode(item.XPath).InnerText;//这里报错“表达式的计算结果必须为节点集”
    continue;
}
if (item.ChildNodes.Count > 0)
{
XpathList.Add(new ObjXpath() { id = Index.ToString(), Key = item.XPath, Value = "" });

UIContorol(item.XPath);
Index++;
Setxpath(item);
}
else
{
XpathList.Add(new ObjXpath() { id = Index.ToString(), Key = item.XPath, Value = "" });
UIContorol(item.XPath);
Index++;
}
}
}


显然,当item.XPath是html[1]/body[1]/div[1]/#text[1]时,不能用str = hd.DocumentNode.SelectSingleNode(item.XPath).InnerText;来获取#text[1]
但是,当item.XPath是html[1]/body[1]/div[1]时,          却可以用str = hd.DocumentNode.SelectSingleNode(item.XPath).InnerText;来获取div[1]中的纯文字内容,但是如果div[1]里面还有图片的化,就很难保持原有的文字和图片的前后关系。

我想用#text的xpath表达式来直接获取#text的节点,应该怎么写?先谢谢各位了



1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2014-12-18 10:12:23 | 显示全部楼层
我只是路过打酱油的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-11-24 12:45

© 2014-2021

快速回复 返回顶部 返回列表