⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 labeltransform.cs

📁 动易SiteFactory&#8482 网上商店系统1.0源代码
💻 CS
📖 第 1 页 / 共 4 页
字号:
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 + -