• 一个页面标题和过滤输出的解决方案(下)


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

    抽象类代码简洁如下:

    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(), 这是重点

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

    public class ReplaceTextList:ReplaceTextListBase
    {
            
    public override System.Collections.Generic.Dictionary<stringstring> 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主机头进行分类管理,自己定义替换字符等,最后查询与替换。

    版权声明:本文原创发表于 博客园,作者为 路过秋天 本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。
    个人微信公众号
    创业QQ群:617713515
    Donation(扫码支持作者):支付宝:
    Donation(扫码支持作者):微信:
  • 相关阅读:
    codevs1735 方程的解数(meet in the middle)
    cf280C. Game on Tree(期望线性性)
    使用ASP.NET上传多个文件到服务器
    Oracle DB 数据库维护
    poj 3237(树链剖分+线段树)
    undefined reference to 'pthread_create'
    ios开发-调用系统自带手势
    Mysql创建、删除用户、查询所有用户等教程,提升您的MYSQL安全度!
    Number Sequence_hdu_1005(规律)
    SCU 4313 把一棵树切成每段K个点 (n%k)剩下的点不管
  • 原文地址:https://www.cnblogs.com/cyq1162/p/1403321.html
Copyright © 2020-2023  润新知