上一篇说到:为了可扩展与方便大伙,我定义了一个抽象类,先实现了三个正则用于截取标题,说明,和关键字。
抽象类代码简洁如下:
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;
}
}
{
/// < 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(), 这是重点
现在看一下我的示例中的子类的实现,继承自抽象类,复写虚方法:
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;
}
}
{
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方法把要替换的文字给替换掉就行了,具体也可以结合下数据库或其它文件操作
如果要替换其它或过滤文件,只要写多几个add方法把要替换的文字给替换掉就行了,具体也可以结合下数据库或其它文件操作
另外说明:
例子上,直接就定死了标题输出为:TitleRegex,这里可以结合自己的需要,替换成任意字符串。
提示:抽象类里还留下了PageUr吧,可以根据Url查出Title和description和keyword来实现自己的扩展。
提示:抽象类里还留下了PageUr吧,可以根据Url查出Title和description和keyword来实现自己的扩展。
另外给出一些我早期实现的思路:
建数据库表,对url主机头进行分类管理,自己定义替换字符等,最后查询与替换。