📄 labeltransform.cs
字号:
namespace PowerEasy.Templates
{
using PowerEasy.Common;
using PowerEasy.Components;
using PowerEasy.Enumerations;
using PowerEasy.IDal.TemplateProc;
using PowerEasy.Logging;
using PowerEasy.Model.TemplateProc;
using System;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
using System.Web;
using System.Web.Caching;
using System.Xml;
using System.Xml.XPath;
using System.Xml.Xsl;
public sealed class LabelTransform
{
private static readonly ILabelProc dal = DataAccess.LabelCode();
private LabelTransform()
{
}
private static bool CheckLabelDate(LabelInfo getdate)
{
DateTime time;
DateTime time2;
string str = getdate.OriginalData["begintime"];
string str2 = getdate.OriginalData["endtime"];
if (string.IsNullOrEmpty(str) || DateTime.TryParse(str, out time))
{
time = new DateTime(0x76c, 1, 1);
}
if (string.IsNullOrEmpty(str2) || DateTime.TryParse(str2, out time2))
{
time2 = new DateTime(0x270f, 12, 0x1f);
}
return ((DateTime.Now.ToLocalTime() >= time) && (DateTime.Now.ToLocalTime() <= time2));
}
private static XslCompiledTransform GetCacheXslCompiledTransform(LabelInfo labelInfo, string xsltTemplate)
{
string str = labelInfo.OriginalData["id"];
string labelDir = SiteConfig.SiteOption.LabelDir;
try
{
string str4;
string key = "CK_Label_LabelTransform_XslCompiledTransform_" + str;
if (HttpContext.Current != null)
{
str4 = HttpContext.Current.Server.MapPath("~/" + labelDir) + @"\" + str + ".config";
}
else
{
str4 = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, labelDir + @"\" + str + ".config");
}
XslCompiledTransform transform = SiteCache.Get(key) as XslCompiledTransform;
if (transform == null)
{
XmlDocument stylesheet = new XmlDocument();
transform = new XslCompiledTransform();
string strA = (labelInfo.LabelDefineData["OutType"] == null) ? "" : labelInfo.LabelDefineData["OutType"].Trim();
XsltSettings settings = new XsltSettings(true, true);
if (string.Compare(strA, "sin", true) == 0)
{
settings = new XsltSettings(true, false);
}
stylesheet.LoadXml(xsltTemplate);
transform.Load(stylesheet, settings, null);
if (File.Exists(str4))
{
SiteCache.Insert(key, transform, new CacheDependency(str4));
}
}
return transform;
}
catch (XmlException exception)
{
labelInfo.LabelContent = new StringBuilder("[err:标签'" + str + "'模板不符合XML规范,原因:" + exception.Message + "]");
return null;
}
catch (XsltException exception2)
{
labelInfo.LabelContent = new StringBuilder("[err:标签'" + str + "'装载XSLT模板错误,原因:" + exception2.Message + "]");
return null;
}
}
public static LabelInfo GetLabel(LabelInfo labelInfo)
{
XPathNavigator navigator;
string str = labelInfo.OriginalData["id"];
if (string.IsNullOrEmpty(str))
{
labelInfo.LabelContent = new StringBuilder("[err:标签没有设置ID属性]");
return labelInfo;
}
str = str.ToLower().Trim();
LabelManageInfo cacheLabelByName = LabelManage.GetCacheLabelByName(str);
if (cacheLabelByName.IsNull || string.IsNullOrEmpty(cacheLabelByName.Name))
{
labelInfo.LabelContent = new StringBuilder("[err:标签'" + str + "'不存在]");
return labelInfo;
}
try
{
XmlDocument document = new XmlDocument();
document.LoadXml(cacheLabelByName.Define.ToString());
foreach (XmlNode node in document.DocumentElement.ChildNodes)
{
if (string.Compare(node.Name, "attributes", true) == 0)
{
string innerText = node.SelectSingleNode("name").InnerText;
string str3 = labelInfo.OriginalData[innerText];
string[] strArray = node.SelectSingleNode("default").InnerText.Split(new string[] { "|||" }, StringSplitOptions.None);
if (strArray.Length > 1)
{
if (string.IsNullOrEmpty(str3))
{
labelInfo.AttributesData[innerText] = strArray[0];
}
else
{
int index = DataConverter.CLng(str3);
if (index >= strArray.Length)
{
index = 0;
}
labelInfo.AttributesData[innerText] = strArray[index];
}
}
else if (string.IsNullOrEmpty(str3))
{
labelInfo.AttributesData[innerText] = node.SelectSingleNode("default").InnerText;
}
else
{
labelInfo.AttributesData[innerText] = str3;
}
continue;
}
labelInfo.LabelDefineData[node.Name] = node.InnerText;
}
}
catch (XmlException exception)
{
labelInfo.LabelContent = new StringBuilder("[err:标签'" + str + "'XML定义错,原因:" + exception.Message + "]");
return labelInfo;
}
if (!CheckLabelDate(labelInfo))
{
labelInfo.LabelContent = new StringBuilder(labelInfo.OriginalData["outtime"]);
return labelInfo;
}
if (DataConverter.CBool(labelInfo.OriginalData["page"]))
{
labelInfo.PageSize = DataConverter.CLng(labelInfo.OriginalData["pagesize"]);
}
StringBuilder labelContent = SqlAttributesProc(labelInfo).LabelContent;
if (labelInfo.Error > 0)
{
if (labelInfo.Error >= 2)
{
LogLabelTransformException(labelInfo);
labelInfo.LabelContent.Remove(0, labelInfo.LabelContent.Length);
labelInfo.LabelContent.Append("[err:标签\"" + labelInfo.OriginalData["id"] + "\"查询数据库时出现异常。有关错误的完整说明,请到后台日志管理中查看“异常记录”。]");
}
return labelInfo;
}
if (string.Compare(labelContent.ToString(), "static", true) == 0)
{
labelInfo.LabelContent = StaticLabelProc(labelInfo, cacheLabelByName.Template);
return labelInfo;
}
if (string.Compare(labelContent.ToString(), "QueryLabel") == 0)
{
labelInfo.LabelContent.Remove(0, labelInfo.LabelContent.Length);
XmlManage manage = XmlManage.Instance(cacheLabelByName.Define.ToString(), XmlType.Content);
if (labelInfo.TotalPub == -999)
{
labelInfo.LabelContent.Append(manage.GetNodeValue("root/QueryError"));
if (labelInfo.LabelContent.Length < 1)
{
labelInfo.LabelContent.Append("err");
}
return labelInfo;
}
labelInfo.LabelContent.Append(manage.GetNodeValue("root/QuerySucceed"));
if (labelInfo.LabelContent.Length < 1)
{
labelInfo.LabelContent.Append("ok");
}
labelInfo.LabelContent.Replace("<xsl:value-of select=\"TotalPub\"/>", labelInfo.TotalPub.ToString());
return labelInfo;
}
string strA = (labelInfo.LabelDefineData["OutType"] == null) ? "" : labelInfo.LabelDefineData["OutType"].Trim();
if (string.Compare(strA, "xml", true) == 0)
{
labelInfo.LabelContent = labelContent;
return labelInfo;
}
XmlDocument document2 = new XmlDocument();
try
{
document2.LoadXml(labelContent.ToString());
navigator = document2.CreateNavigator();
}
catch (XmlException exception2)
{
labelInfo.LabelContent = new StringBuilder("[err:标签'" + str + "'得到的XML数据错误,原因:" + exception2.Message + ",原始数据:" + labelContent.ToString() + "]");
return labelInfo;
}
if (string.Compare(strA, "txt", true) == 0)
{
StringBuilder builder2 = new StringBuilder();
if (document2.FirstChild.HasChildNodes)
{
for (int i = 0; i < document2.FirstChild.FirstChild.ChildNodes.Count; i++)
{
if (i > 0)
{
builder2.Append(",");
}
builder2.Append(document2.FirstChild.FirstChild.ChildNodes.Item(i).InnerText);
}
}
labelInfo.LabelContent = builder2;
return labelInfo;
}
if (cacheLabelByName.Template.Length == 0)
{
labelInfo.LabelContent = labelContent;
return labelInfo;
}
labelInfo.LabelContent.Remove(0, labelInfo.LabelContent.Length);
XsltArgumentList arguments = new XsltArgumentList();
XslCompiledTransform cacheXslCompiledTransform = GetCacheXslCompiledTransform(labelInfo, cacheLabelByName.Template.ToString());
if (cacheXslCompiledTransform != null)
{
foreach (string str5 in labelInfo.AttributesData.AllKeys)
{
arguments.AddParam(str5, "", labelInfo.AttributesData[str5]);
}
arguments.AddParam("SystemCurrentPage", "", labelInfo.Page.ToString());
arguments.AddExtensionObject("labelproc", InsideStaticLabelObject);
try
{
cacheXslCompiledTransform.Transform((IXPathNavigable) navigator, arguments, (TextWriter) new StringWriter(labelInfo.LabelContent));
}
catch (XsltException exception3)
{
labelInfo.LabelContent = new StringBuilder("[err:标签'" + str + "'模板转换错误,原因:" + exception3.Message + "]");
return labelInfo;
}
catch (ArgumentException exception4)
{
labelInfo.LabelContent = new StringBuilder("[err:标签'" + str + "'模板转换错误,原因:" + exception4.Message + "]");
return labelInfo;
}
labelInfo.LabelContent.Replace("<?xml version=\"1.0\" encoding=\"utf-16\"?>", string.Empty);
}
return labelInfo;
}
public static LabelInfo GetLabelDataTable(string labelId, int cPage, LabelInfo inLabel)
{
LabelInfo labelInfo = inLabel;
labelInfo.Page = cPage;
LabelManageInfo cacheLabelByName = LabelManage.GetCacheLabelByName(labelId);
if (string.IsNullOrEmpty(cacheLabelByName.Name))
{
labelInfo.LabelContent = new StringBuilder("[err:DataSource'" + labelId + "'不存在]");
return labelInfo;
}
try
{
XmlDocument document = new XmlDocument();
document.LoadXml(cacheLabelByName.Define.ToString().Replace("<?xml version=\"1.0\"?>", string.Empty));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -