[已解决问题] 怎么把指定的静态页面标签形式输出成Repeater模板
提问时间: 2007-12-21 16:34
悬赏分:50 浏览:632 次

调用指定分类下的最新6篇文档

[Yu:DocList DocCount=6,CategoryId=89,Sort=DateTime,OrderBy=DESC,TitleLen=24,TitleAddStr=...]
[ItemTemplate]
<a href="[Yu:DocPath]" target="_blank">[Yu:Title]</a><br>
[/ItemTemplate]
[/Yu:DocList]


这是我在一个cms上看到一种标签调用形式,格式和Repeater差不多,请问怎么把上面的标签转成所需要格式(不是采用正则形式)


提问者:菜菜灰 - 初学一级

问题补充:
回:wingoo
问题在于怎么解析?

所有回答(4)
就是解析吧,,把参数读出来,然后生成,,,
7个月前   回答者:wingoo - 小虾三级
不用正则的话就replace咯。。。
7个月前   回答者:没剑 - 菜鸟二级
可以用StringTemplate转换完了生成一个文件然后保存起来.
7个月前   回答者:沙加 - 老鸟四级
支持NVelocity
7个月前   回答者:蛙蛙池塘 - 菜鸟二级
评论
7个月前   wingoo :
写了个^_^,
仅仅是初步实现
还有很多要改进,比如开始的解析字串的部分,后来的取数据的部分...

            string html = "[Yu:DocList DocCount=6,CategoryId=89,Sort=DateTime,OrderBy=DESC,TitleLen=24][ItemTemplate]<a href=\"[Yu:DocPath]\" target=\"_blank\">[Yu:Title]</a><br>[/ItemTemplate][/Yu:DocList]";
            int s = html.IndexOf("[Yu:DocList");
            int t = html.IndexOf("]");
            string str = html.Substring(s+11, t - s-11);
            string[] list = str.Trim().Split(",".ToCharArray());

            ParaList paraList = new ParaList();
            foreach (string s1 in list)
            {
                string[] li = s1.Split("=".ToCharArray());
                if(li.Length==2)
                switch(li[0].Trim().ToLower())
                {
                    case "doccount":
                        paraList.DocCount = Formatter.FormatterInt(li[1].Trim());
                        break;
                    case "titlelen":
                        paraList.TitleLen = Formatter.FormatterInt(li[1].Trim());
                        break;
                    case "categoryid":
                        paraList.CategoryID = Formatter.FormatterInt(li[1].Trim());
                        break;
                    case "sort":
                        paraList.Sort = li[1].Trim();
                        //需判断是否符合要求
                        break;
                    case "orderby":
                        paraList.OrderBy = li[1].Trim();
                        //需判断是否符合要求
                        break;
                }
            }

            IList<News> newss = News.GetNews(paraList.BuildSql());
            if (newss.Count > 0)
            {
                s = html.IndexOf("[ItemTemplate]");
                t = html.IndexOf("[/ItemTemplate]");
                str = html.Substring(s, t
7个月前   wingoo :
没显示完?-____-

            IList<News> newss = News.GetNews(paraList.BuildSql());
            if (newss.Count > 0)
            {
                s = html.IndexOf("[ItemTemplate]");
                t = html.IndexOf("[/ItemTemplate]");
                str = html.Substring(s, t - s).TrimStart("[ItemTemplate]".ToCharArray()).TrimEnd("[/ItemTemplate]".ToCharArray());
                string liNews = "";

                StringBuilder sb = new StringBuilder();
                foreach (News news in newss)
                {
                    sb.Append(str.Replace("[Yu:Title]", news.Title));
                }

                Response.Write(sb.ToString());
            }
        }

        public class News
        {
            private string title;
            public string Title
            {
                get { return title; }
                set { title = value; }
            }

            public static IList<News> GetNews(string sql)
            {
                IList<News> newss = new List<News>();
                News news = new News();
                news.Title = "test1";
                newss.Add(news);
                news = new News();
                news.Title = "test2";
                newss.Add(news);

                return newss;
            }
        }

        public class Formatter
        {
            public static int FormatterInt(string str)
            {
                int i = 0;
                int.TryParse(str, out i);

                return i;
            }
        }

        public class ParaList
        {
            private int docCount;
            public  int DocCount
            {
                get { return docCount; }
                set { docCount = value; }
            }

            private int categoryID;
            public int CategoryID
            {
      
7个月前   wingoo :
            private int categoryID;
            public int CategoryID
            {
                get { return categoryID; }
                set { categoryID = value; }
            }

            private string sort;
            public string Sort
            {
                get { return sort; }
                set { sort = value; }
            }

            private string orderBy;
            public string OrderBy
            {
                get { return orderBy; }
                set { orderBy = value; }
            }

            private int titleLen;
            public int TitleLen
            {
                get { return titleLen; }
                set { titleLen = value; }
            }

            public string BuildSql()
            {
                return "";
            }

        }

   您需要登录以后才能回答!
我的问题    我要提问


快到期问题

> 问题排行榜

有不合适内容,建议去除