博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一个页面标题和过滤输出的解决方案(下)
阅读量:6601 次
发布时间:2019-06-24

本文共 2282 字,大约阅读时间需要 7 分钟。

上一篇说到:为了可扩展与方便大伙,我定义了一个抽象类,先实现了三个正则用于截取标题,说明,和关键字。

抽象类代码简洁如下:

ExpandedBlockStart.gif
public abstract class ReplaceTextListBase
    {
        /// 
<
summary
>
        /// 将被返回的替换文本集合列表
        /// 
</
summary
>
        public Dictionary
<
string
, string
>
 replaceTextList = new Dictionary
<
string
, string
>
();
        /// 
<
summary
>
        /// 获取当前请求页面的url信息
        /// 
</
summary
>
        public Uri PageUrl { get { return HttpContext.Current.Request.Url; } }
        /// 
<
summary
>
        /// 获取html的title的正则
        /// 
</
summary
>
        public string TitleRegex { get { return "
<
title.
*
>
.*
</
title
>
"; } }
        public string TitleFormat(string titleText)
        {
            return "
<
title
>
" + titleText + "
</
title
>
";
        }
        /// 
<
summary
>
        /// 获取html的Description的正则
        /// 
</
summary
>
        public string DescriptionRegex { get { return "
<
meta
[^<
>
]+name=[\"\']description[^
<>
]*[/]>"; } }
        public string DescriptionFormat(string descriptionText)
        {
            return "
<
meta 
id
=\"description\" 
name
=\"description\" 
content
=\"" 
+ descriptionText + "\" 
/>
";
        }
        /// 
<
summary
>
        /// 获取html的Keyword的正则
        /// 
</
summary
>
        public string KeywordRegex { get { return "
<
meta
[^<
>
]+name=[\"\']keywords[^
<>
]*[/]>"; } }
        public string KeywordFormat(string keywordText)
        {
            return "
<
meta 
id
=\"keywords\" 
name
=\"keywords\" 
content
=\"" 
+ keywordText + "\" 
/>
";
        }
        /// 
<
summary
>
        /// 复写此方法,调用replaceTextList.add()方法后,return replaceTextList;
        /// 
</
summary
>
        /// 
<
returns
></
returns
>
        public virtual Dictionary
<
string
, string
>
 GetReplaceTextList()
        {
            return replaceTextList;
        }
    }

 

 

抽象类后,留下一个虚方法GetReplaceTextList(), 这是重点

现在看一下我的示例中的子类的实现,继承自抽象类,复写虚方法:

ExpandedBlockStart.gif
public
 
class
 ReplaceTextList:ReplaceTextListBase
{
        
public
 
override
 System.Collections.Generic.Dictionary
<
string
string
>
 GetReplaceTextList()
        {
            replaceTextList.Add(TitleRegex,TitleFormat(
"
TitleRegex
"
));
            replaceTextList.Add(DescriptionRegex,DescriptionFormat(
"
descriptionttest
"
));
            replaceTextList.Add(KeywordRegex,KeywordFormat(
"
keywordadfdfdf
"
));
            
return
 replaceTextList;
        }
}

 

代码解析:

例子中的子类实现很简单,就复写了一个虚方法,最终页面的输出标题为:TitleRegex。其它两个同理。
如果要替换其它或过滤文件,只要写多几个add方法把要替换的文字给替换掉就行了,具体也可以结合下数据库或其它文件操作

 

另外说明:

例子上,直接就定死了标题输出为:TitleRegex,这里可以结合自己的需要,替换成任意字符串。
提示:抽象类里还留下了PageUr吧,可以根据Url查出Title和description和keyword来实现自己的扩展。

 

 

另外给出一些我早期实现的思路:

建数据库表,对url主机头进行分类管理,自己定义替换字符等,最后查询与替换。

版权声明:本文原创发表于博客园,作者为路过秋天,原文链接:http://www.cnblogs.com/cyq1162/archive/2009/03/04/1403321.html

你可能感兴趣的文章
IOS_CGRect
查看>>
对欧拉筛法求素数的重新理解
查看>>
Sql Server中不常用的表运算符之APPLY(1)
查看>>
css控制超长内容自动省略
查看>>
【DM642】ICELL Interface—Cells as Algorithm Containers
查看>>
linux所有命令失效的解决办法
查看>>
力扣算法题—085最大矩阵
查看>>
svs 在创建的时候 上传文件夹 bin obj 这些不要提交
查看>>
mysql-用命令导出、导入表结构或数据
查看>>
Tinkphp
查看>>
EntityFrameworkCore 一对一 && 一对多 && 多对多配置
查看>>
How to temporally disable IDE tools (load manually)
查看>>
Vue.js学习 Item4 -- 数据双向绑定
查看>>
几种排序方式的java实现(01:插入排序,冒泡排序,选择排序,快速排序)
查看>>
test--构造函数写法
查看>>
server application unavailable
查看>>
浅谈尾递归的优化方式
查看>>
eclipse 的小技巧
查看>>
亲测安装php
查看>>
频率域滤波
查看>>