我們
.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.ykfic.cn