我们
.net快速生成静态网页的方法一里面讲到 CreateIncludeHtml,我们现在就写这个解析方法
/// <summary>
/// 这是一个把包含其它网页模板的信息替换成一个模板
/// </summary>
/// <param name="html">替换前的文件</param>
/// <returns>这是替换后的文件</returns>
public static string CreateIncludeHtml(string html)
{
//得到包含的模板文件的路径的标签信息
string fileinfo = string.Empty;
//得到包含的模板文件的路径
string zdinfo = string.Empty;
//解析标签的模板
Regex reg = new Regex("(<!--include file=\"(?<zd>[\\s\\S]*?)\" -->)");
//判断是否存我们的需要的信息
if (reg.IsMatch(html))
{
//循环得我们的需要的信息
foreach (Match m in reg.Matches(html))
{
//得到标签解析前的信息
fileinfo = m.Groups[0].Value.ToString();
//得到解析标签的路径
zdinfo = m.Groups["zd"].ToString();
//判断信息是否存在
if (!string.IsNullOrEmpty(fileinfo) && !string.IsNullOrEmpty(zdinfo) && zdinfo.IndexOf(".html") > 0)
{
//替换我们的标签信息
html = html.Replace(fileinfo, CreateFile.CreateSingleFile("/Templates/" + zdinfo));
}
}
}
//返回参数
return html;
}
我们这里已经还记得我们上面的模板里面还有两个解析标签,所以我们要将上面的createDefault改为
public void createDefault(string htmlpath, string filename)
{
//将我们刚才写的duzhan.html文件路径写进去然后读取到信息
string html = CreateFile.CreateSingleFile(htmlpath);
//如果读取的信息没有读取到信息我们就返回回去。
if (string.IsNullOrEmpty(html))
{
return;
}
//解析我们的标签,这个方法我们在下面定义。
html=CreateIncludeHtml(html);
//解析基本标签
html = CreateTemplates.CreateListHtml(html);
//解析if标签
html = CreateTemplates.ReplaceIfTag(html);
//生成文件
new CreateFile().CreateWriteFile(filename, html);
}
那么我们下面的就先来写一个解析循环标签的方法
public static string CreateListHtml(string html)
{
//得到网页信息
string contentHtml = html;
//表格名
string table = string.Empty;
//参数编号名
string typeid = string.Empty;
//得到包含的模板文件的路径的标签信息
string taginfo = string.Empty;
//得到包含的模板文件的路径
string zdinfo = string.Empty;
//查询的条数
string num = string.Empty;
//查询的条件
string where = string.Empty;
//查询的排列顺序
string order = string.Empty;
//解析标签的模板
Regex reg = new Regex("(<!--list(\\s)(?<ListSet>[^(\\-\\-)]*)--\\>(?<zd>[\\s\\S]*?)\\<!--/list-->)");
//判断是否存我们的需要的信息
if (reg.IsMatch(html))
{
//循环得我们的需要的信息
foreach (Match m in reg.Matches(html))
{
table = GetTagVal(m.Groups["ListSet"].ToString(), "table");
typeid = GetTagVal(m.Groups["ListSet"].ToString(), "typeid");
num = GetTagVal(m.Groups["ListSet"].ToString(), "num");
order = GetTagVal(m.Groups["ListSet"].ToString(), "order");
where = GetTagVal(m.Groups["ListSet"].ToString(), "where");
//这是我们标签里面的详细信息
zdinfo = m.Groups["zd"].ToString();
//List标签内容,这个是用于替换的老标签信息
taginfo = m.Groups[0].Value.ToString();
//这是是一个转型大家自己定义一个就可以了
int listnum = Convert.ToInt32(num);
int showtypeid = Convert.ToInt32(typeid);
string strsql = " 1=1 ";
//这是需要大家自定义方法去操作数据库的信息,将信息替换就可以了
html = html.Replace(taginfo, replaceListHmtl(zdinfo, table, listnum, strsql, order, letter));
}
}
return html;
}
后我们来写替换标签。
public static string ReplaceIfTag(string tempHtml)
{
string contentHtml = tempHtml;
Regex reg = new Regex(@"(<!--if (?<IfSet>[\s\S.]+?) --\>(?<text>[\s\S.]*?)\<!--/if-->)");
if (reg.IsMatch(tempHtml))
{
foreach (Match m in reg.Matches(tempHtml))
{
//所有的信息
string alltext = m.Groups[0].Value.ToString();
//前面的标签
string testbase = GetTagVal(m.Groups["IfSet"].ToString(), "testbase");
//后面标签的内容
string testvalue = GetTagVal(m.Groups["IfSet"].ToString(), "testvalue");
//判断的方式
string testmodel = GetTagVal(m.Groups["IfSet"].ToString(), "testmodel");
//得到内容
string text = m.Groups["text"].ToString();
string vtruestr = "";
string vfalsestr = "";
if (text.Contains("<!--else-->"))
{
string[] textarr = System.Text.RegularExpressions.Regex.Split(text, "<!--else-->");
if (textarr.Length > 0)
{
vtruestr = textarr[0];
vfalsestr = textarr[1];
}
}
else
{
vtruestr = text;
vfalsestr = "";
}
bool vbool = false;
if (testmodel.Equals("%"))
{
if (Convert.ToInt32(testbase) % Convert.ToInt32(testvalue) == 0)
{
vbool = true;
}
}
else if (testmodel.Equals("="))
{
if (testbase.Equals(testvalue))
{
vbool = true;
}
}
else if (testmodel.Equals("!="))
{
if (testbase.Trim().Equals(testvalue.Trim()))
{
vbool = true;
}
}
else if (testmodel.Equals(">"))
{
if (Convert.ToInt32(testbase) > Convert.ToInt32(testvalue))
{
vbool = true;
}
}
else if (testmodel.Equals("<"))
{
if (Convert.ToInt32(testbase) < Convert.ToInt32(testvalue))
{
vbool = true;
}
}
string resut = "";
if (vbool)
{
resut = vtruestr;
}
else
{
resut = vfalsestr;
}
contentHtml = contentHtml.Replace(alltext, resut);
}
}
return contentHtml;
}
这样我们就将生成静态网页的方法写好,如果有不懂,请联系独占网络的技术人员 http://www.sz886.com