获取一段HTML文本中的第一张图片与截取内容摘要
2024-10-19 22:33:12
有时候我们获得到的数据是一段HTML文本,也许这段文本里面有许多图片,需要截取一张作为标题图片,这时就可以用到下面这个方法获取到第一张图片:
#region 获取第一张图片 /// <summary>
/// 获取HTML文本的图片地址
/// </summary>
/// <param name="content"></param>
/// <returns></returns>/
///
public ArrayList getimgurl(string html)
{
ArrayList resultStr = new ArrayList();
Regex r = new Regex(@"<IMG[^>]+src=\s*(?:'(?<src>[^']+)'|""(?<src>[^""]+)""|(?<src>[^>\s]+))\s*[^>]*>", RegexOptions.IgnoreCase);//忽视大小写
MatchCollection mc = r.Matches(html); foreach (Match m in mc)
{
resultStr.Add(m.Groups["src"].Value.ToLower());
}
if (resultStr.Count > 0)
{
return resultStr;
}
else
{
resultStr.Clear();
return resultStr;
}
}
#endregion
注意:上面所返回的是一个ArrayList 集合,包含了文本里面所有的Img的src!
这样我们就可以访问到img的src了。
有时候我们得到的数据是一段HTML文本,需要截取HTML文本的一部分作为内容摘要。此时,我们可以运用下面这个方法:
#region 新闻内容摘要 /// <summary>
/// 新闻内容摘要
/// </summary>
/// <param name="sString"></param>
/// <param name="nLeng"></param>
/// <returns></returns>
public string GetContentSummary(string content, int length, bool StripHTML)
{
if (string.IsNullOrEmpty(content) || length == 0)
return "";
if (StripHTML)
{
Regex re = new Regex("<[^>]*>");
content = re.Replace(content, "");
content = content.Replace(" ", "").Replace(" ", "");
if (content.Length <= length)
return content;
else
return content.Substring(0, length) + "……";
}
else
{
if (content.Length <= length)
return content; int pos = 0, npos = 0, size = 0;
bool firststop = false, notr = false, noli = false;
StringBuilder sb = new StringBuilder();
while (true)
{
if (pos >= content.Length)
break;
string cur = content.Substring(pos, 1);
if (cur == "<")
{
string next = content.Substring(pos + 1, 3).ToLower();
if (next.IndexOf("p") == 0 && next.IndexOf("pre") != 0)
{
npos = content.IndexOf(">", pos) + 1;
}
else if (next.IndexOf("/p") == 0 && next.IndexOf("/pr") != 0)
{
npos = content.IndexOf(">", pos) + 1;
if (size < length)
sb.Append("<br/>");
}
else if (next.IndexOf("br") == 0)
{
npos = content.IndexOf(">", pos) + 1;
if (size < length)
sb.Append("<br/>");
}
else if (next.IndexOf("img") == 0)
{
npos = content.IndexOf(">", pos) + 1;
if (size < length)
{
sb.Append(content.Substring(pos, npos - pos));
size += npos - pos + 1;
}
}
else if (next.IndexOf("li") == 0 || next.IndexOf("/li") == 0)
{
npos = content.IndexOf(">", pos) + 1;
if (size < length)
{
sb.Append(content.Substring(pos, npos - pos));
}
else
{
if (!noli && next.IndexOf("/li") == 0)
{
sb.Append(content.Substring(pos, npos - pos));
noli = true;
}
}
}
else if (next.IndexOf("tr") == 0 || next.IndexOf("/tr") == 0)
{
npos = content.IndexOf(">", pos) + 1;
if (size < length)
{
sb.Append(content.Substring(pos, npos - pos));
}
else
{
if (!notr && next.IndexOf("/tr") == 0)
{
sb.Append(content.Substring(pos, npos - pos));
notr = true;
}
}
}
else if (next.IndexOf("td") == 0 || next.IndexOf("/td") == 0)
{
npos = content.IndexOf(">", pos) + 1;
if (size < length)
{
sb.Append(content.Substring(pos, npos - pos));
}
else
{
if (!notr)
{
sb.Append(content.Substring(pos, npos - pos));
}
}
}
else
{
npos = content.IndexOf(">", pos) + 1;
sb.Append(content.Substring(pos, npos - pos));
}
if (npos <= pos)
npos = pos + 1;
pos = npos;
}
else
{
if (size < length)
{
sb.Append(cur);
size++;
}
else
{
if (!firststop)
{
sb.Append("……");
firststop = true;
}
}
pos++;
} }
return sb.ToString();
}
}
#endregion
注意:方法中的bool StripHTML参数表示是否以HTMl文本方式输出,如果为True的话表示去除HTML标签与样式,截取到的是纯文本,反之就是以HTMl文本输出。
这样我们就可以根据自己喜欢的方式来输出文本。
最新文章
- BZOJ 2086: [Poi2010]Blocks
- Java学习随笔3:遍历文件夹及文件的读取和写入
- oracle直通车6关于rman备份恢复数据文件,以及创建分区表的实验
- css选择器nth-child()和nth-of-type()的应用
- 关于微信聊天与朋友圈如何快速切换 Mark
- 教你区分LVDS屏线及屏接口定义
- 快速切换目录软件推荐——autojump
- 如何在Linux下重命名多个文件
- Delphi 服务操作
- 微信小程序环境搭建
- RabbitMq install on Centos6.3
- 利用data-src属性 更换图片
- CF271D 【Good Substrings】
- Gym - 100989H
- 如何修改路由器的登录IP地址?
- 我Win下常用工具清单
- markdown语法示例
- CF993E Nikita and Order Statistics 【fft】
- 图解源码之FutureTask篇(AQS应用)
- Linux下Shell命令的输出信息同时显示在屏幕和保存到日志文件中
热门文章
- Replace Type Code With Class和Replace Type Code With Subclass和Replace Type Code With State/Strategy
- WIFI的通信知识整理
- ie下文件上传无权访问的问题
- HDU 6118 度度熊的交易计划 【最小费用最大流】 (2017";百度之星";程序设计大赛 - 初赛(B))
- D. Babaei and Birthday Cake--- Codeforces Round #343 (Div. 2)
- javascript中的_return_false和return_true
- Java泛型和反射总结
- Struts2声明式异常处理
- H5页面解决左右滑动问题
- Binder通信机制介绍