摘要:C#截取範本HTML區段物件函式
最近為了寫報表,製作了報表範本讀入函式。
將HTML的報表範本讀入後,利用Regular Expression將各個區段讀出來,在自己想辦法Replace組裝一下。
目前是劣質版,也就是以下這個Expression尚有問題,萬一範本中的文字中有@就會掛掉啦!(不知有何高招可以解決並讀入
<!--#ABC_START#-->我要的區段<!--#ABC_END#-->
string RegexExpression = "<!--[#]" + TemplateName + "_START[#]-->(?<item>[^@]+)<!--[#]" + TemplateName + "_END[#]-->";
using System;
using System.Data;
using System.Configuration;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
using System.Collections.Generic;
/// <summary>
/// Summary description for ReportFunction
/// </summary>
public class ReportFunction
{
//分頁語法
public string PageBreak = "<div class='PageBreak'> </div>";
public ReportFunction()
{
}
//將參數清空(例"#NUMBER#" →"");
public string GetParameterClear(string SourceString)
{
string TemplateString = "";
int start_index;
int end_index;
string SubString="";
start_index = SourceString.IndexOf('#');
while (start_index >= 0)
{
end_index = SourceString.IndexOf('#', start_index + 1);
SubString = SourceString.Substring(start_index, end_index - start_index + 1);
SourceString = SourceString.Replace(SubString, "");
start_index = SourceString.IndexOf('#');
}
return SourceString;
}
public string GetTempateString(string SourceString, string TemplateName)
{
string TemplateString = "";
string RegexExpression = "<!--[#]" + TemplateName + "_START[#]-->(?<item>[^@]+)<!--[#]" + TemplateName + "_END[#]-->";
Regex pattern = new Regex(RegexExpression, RegexOptions.IgnorePatternWhitespace);
Match match = pattern.Match(SourceString);
TemplateString = match.Value;
TemplateString = TemplateString.Replace("<!--#" + TemplateName + "_START#-->", "");
TemplateString = TemplateString.Replace("<!--#" + TemplateName + "_END#-->", "");
return TemplateString;
}
public string GetTempateBeforeString(string SourceString, string TemplateName)
{
string TemplateString = "";
string RegexExpression = "(?<item>[^@]+)<!--[#]" + TemplateName + "_START[#]-->";
Regex pattern = new Regex(RegexExpression, RegexOptions.IgnorePatternWhitespace);
Match match = pattern.Match(SourceString);
TemplateString = match.Value;
TemplateString = TemplateString.Replace("<!--#" + TemplateName + "_START#-->", "");
return TemplateString;
}
public string GetTempateAfterString(string SourceString, string TemplateName)
{
string TemplateString = "";
string RegexExpression = "<!--[#]" + TemplateName + "_END[#]-->(?<item>[^@]+)";
Regex pattern = new Regex(RegexExpression, RegexOptions.IgnorePatternWhitespace);
Match match = pattern.Match(SourceString);
TemplateString = match.Value;
TemplateString = TemplateString.Replace("<!--#" + TemplateName + "_END#-->", "");
return TemplateString;
}
public string GetHtmlString(string HtmlPath)
{
string htmlString = "";
try
{
//讀範本檔
if (File.Exists(HtmlPath))
{
htmlString = File.ReadAllText(HtmlPath, Encoding.UTF8);
}
return htmlString;
}
catch (Exception ex)
{
throw new Exception("Export Report Template File Error");
}
}
//將<!--#TAG_START#-->到<!--#TAG_END#-->區段全部刪除
public string ReplaceTag(string SourceHtml, string ReplaceHtml, string TemplateName)
{
return SourceHtml.Replace("<!--#" + TemplateName.ToUpper() + "_START#-->" + ReplaceHtml + "<!--#" + TemplateName.ToUpper() + "_END#-->", "#" + TemplateName.ToUpper() + "_LIST#");
}
}