private System.Xml.Xsl.XslCompiledTransform HandleXSLT()
        {
            string        xsltindata = _innerData.ToString();
            StringBuilder xsltsb     = new StringBuilder();

            if (!string.IsNullOrEmpty(_xsltstring))
            {
                xsltsb.Append(xsltindata);
            }
            else
            {
                xsltsb.Append("<?xml version=\"1.0\" encoding=\"").Append(_threadEntity.WebSetting.Encoding.BodyName).Append("\"?>");
                xsltsb.Append("<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">");
                xsltsb.Append("<xsl:output method=\"html\" omit-xml-declaration=\"yes\" version=\"1.0\" encoding=\"").Append(_threadEntity.WebSetting.Encoding.BodyName).Append("\" />");
                xsltsb.Append("<xsl:template match=\"/\">");
                xsltsb.Append(xsltindata);
                xsltsb.Append("</xsl:template>");
                xsltsb.Append("</xsl:stylesheet>");
            }
            if (!string.IsNullOrEmpty(_linktemplate))
            {
                xsltsb.Replace("{link}", string.Format(_linktemplate, _index, _max));
            }
            string _xsltTemplate = xsltsb.ToString();

            System.Xml.Xsl.XslCompiledTransform xslTransform = Xy.Web.Cache.XslCompiledTransform.Get(_xsltTemplate);
            return(xslTransform);
        }
示例#2
0
 private string HandleXSLT()
 {
     if (!string.IsNullOrEmpty(_xsltPath))
     {
         using (System.IO.FileStream fs = new System.IO.FileStream(_threadEntity.WebSetting.XsltDir + _xsltPath, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.Read)) {
             using (System.IO.StreamReader sr = new System.IO.StreamReader(fs)) {
                 _xsltLoaded = true;
                 return(sr.ReadToEnd());
             }
         }
     }
     else
     {
         StringBuilder xsltsb = new StringBuilder();
         xsltsb.Append("<?xml version=\"1.0\" encoding=\"").Append(_threadEntity.WebSetting.Encoding.BodyName).Append("\"?>");
         xsltsb.Append("<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"");
         if (_enableCode)
         {
             xsltsb.Append(" xmlns:msxsl=\"urn:schemas-microsoft-com:xslt\"");
         }
         if (_enableScript)
         {
             xsltsb.Append(" xmlns:xyxsl=\"http://www.xiaoyang.com/HodeNamespace\"");
         }
         xsltsb.Append(">");
         xsltsb.Append("<xsl:output method=\"html\" omit-xml-declaration=\"yes\" version=\"1.0\" encoding=\"").Append(_threadEntity.WebSetting.Encoding.BodyName).Append("\" />");
         if (_enableScript)
         {
             xsltsb.Append("<xsl:namespace-alias stylesheet-prefix=\"xyxsl\" result-prefix=\"xsl\"/>");
         }
         if (!string.IsNullOrEmpty(_root))
         {
             xsltsb.Append(string.Format("<xsl:template match=\"{0}\">", _root));
         }
         else
         {
             string _temp = _dataBuilder.GetRoot();
             if (string.IsNullOrEmpty(_temp))
             {
                 xsltsb.Append("<xsl:template match=\"DataTable/DataItem\">");
             }
             else
             {
                 xsltsb.Append(string.Format("<xsl:template match=\"{0}\">", _temp));
             }
         }
         xsltsb.Append(_innerData.ToString());
         xsltsb.Append("</xsl:template>");
         xsltsb.Append("</xsl:stylesheet>");
         _xsltLoaded = true;
         return(xsltsb.ToString());
     }
 }
示例#3
0
        public void Handle(ThreadEntity CurrentThreadEntity, Page.PageAbstract CurrentPageClass, HTMLContainer ContentContainer)
        {
            _threadEntity = CurrentThreadEntity;
            _threadEntity.ControlIndex += 1;
            string _content = string.Empty;

            if (_preEnableScript && _innerData.Length > 0)
            {
                Control.ControlAnalyze _controls = Cache.PageAnalyze.GetInstance(CurrentThreadEntity, CurrentPageClass, this.Map);
                if (!_controls.IsHandled || CurrentPageClass.WebSetting.DebugMode)
                {
                    _controls.SetContent(_innerData.ToArray());
                    _controls.Analyze();
                }
                HTMLContainer _temp = new HTMLContainer(_innerData.Encoding);
                _controls.Handle(CurrentPageClass, _temp);
                _content = _temp.ToString();
            }
            else
            {
                _content = _innerData.ToString();
            }
            if (_append)
            {
                string _originalContent = string.Empty;
                if (CurrentPageClass.PageData[_dataName] != null)
                {
                    _originalContent = CurrentPageClass.PageData[_dataName].GetDataString();
                }
                CurrentPageClass.PageData.Add(_dataName, _originalContent + _content);
            }
            else
            {
                CurrentPageClass.PageData.Add(_dataName, _content);
            }

            _threadEntity.ControlIndex -= 1;
        }
示例#4
0
        public void Handle(ThreadEntity CurrentThreadEntity, Page.PageAbstract CurrentPageClass, HTMLContainer ContentContainer)
        {
            _threadEntity = CurrentThreadEntity;
            _threadEntity.ControlIndex += 1;
            string _content = string.Empty;
            if (_preEnableScript && _innerData.Length > 0) {
                Control.ControlAnalyze _controls = Cache.PageAnalyze.GetInstance(CurrentThreadEntity, CurrentPageClass, this.Map);
                if (!_controls.IsHandled || CurrentPageClass.WebSetting.DebugMode) {
                    _controls.SetContent(_innerData.ToArray());
                    _controls.Analyze();
                }
                HTMLContainer _temp = new HTMLContainer(_innerData.Encoding);
                _controls.Handle(CurrentPageClass, _temp);
                _content = _temp.ToString();
            } else {
                _content = _innerData.ToString();
            }
            if (_append) {
                string _originalContent = string.Empty;
                if (CurrentPageClass.PageData[_dataName] != null) _originalContent = CurrentPageClass.PageData[_dataName].GetDataString();
                CurrentPageClass.PageData.Add(_dataName, _originalContent + _content);
            } else {
                CurrentPageClass.PageData.Add(_dataName, _content);
            }

            _threadEntity.ControlIndex -= 1;
        }
示例#5
0
        public void Handle(ThreadEntity CurrentThreadEntity, Page.PageAbstract CurrentPageClass, HTMLContainer ContentContainer)
        {
            _threadEntity = CurrentThreadEntity;
            if (_webConfig == null)
            {
                _webConfig = CurrentPageClass.WebSetting;
            }
            _threadEntity.ControlIndex += 1;
            HTMLContainer _innerHTML = new HTMLContainer(ContentContainer.Encoding);

            _fillContentDelegate(_settingProperty, CurrentThreadEntity, CurrentPageClass, _innerHTML);

            switch (_mode)
            {
            case TagMode.Get:
                break;

            case TagMode.Compare:
                bool   _passed    = false;
                string _dataValue = _innerHTML.ToString();
                _innerHTML.Clear();
                switch (_compareMode)
                {
                case CompareMode.Equal:
                    if (string.Compare(_dataValue, _compareValue) == 0)
                    {
                        _passed = true;
                    }
                    break;

                case CompareMode.NotEqual:
                    if (string.Compare(_dataValue, _compareValue) != 0)
                    {
                        _passed = true;
                    }
                    break;

                case CompareMode.Greater:
                    if (string.Compare(_dataValue, _compareValue) > 0)
                    {
                        _passed = true;
                    }
                    break;

                case CompareMode.Lesser:
                    if (string.Compare(_dataValue, _compareValue) < 0)
                    {
                        _passed = true;
                    }
                    break;

                case CompareMode.GreaterAndEqual:
                    if (string.Compare(_dataValue, _compareValue) >= 0)
                    {
                        _passed = true;
                    }
                    break;

                case CompareMode.LesserAndEqual:
                    if (string.Compare(_dataValue, _compareValue) <= 0)
                    {
                        _passed = true;
                    }
                    break;
                }
                if (_passed)
                {
                    _innerHTML.Write(_innerData);
                }
                break;

            case TagMode.Exist:
                if (_innerHTML.Length > 0)
                {
                    _innerHTML.Clear();
                    _innerHTML.Write(_innerData);
                }
                break;

            case TagMode.NotExist:
                if (_innerHTML.Length > 0)
                {
                    _innerHTML.Clear();
                }
                else
                {
                    _innerHTML.Write(_innerData);
                }
                break;
            }

            if (_innerHTML.Length == 0 && !string.IsNullOrEmpty(_defaultValue))
            {
                ContentContainer.Write(_defaultValue);
            }
            else
            {
                if (_enableScript)
                {
                    Control.ControlAnalyze _controls = new ControlAnalyze(CurrentThreadEntity, this.Map, _useInnerTag);
                    _controls.SetContent(_innerHTML.ToArray());
                    _controls.Analyze();
                    _controls.Handle(CurrentPageClass, ContentContainer);
                }
                else
                {
                    ContentContainer.Write(_innerHTML);
                }
            }
            _threadEntity.ControlIndex -= 1;
        }
示例#6
0
        public void Handle(string map, string filePath, bool enableScript, bool isIncludePage)
        {
#if DEBUG
            Xy.Tools.Debug.Log.WriteEventLog("start page:" + map);
#endif
            string _staticCacheDir = string.Empty, _staticCacheFile = string.Empty, _staticCachePath = string.Empty;
            if (_threadEntity.URLItem.EnableCache && !isIncludePage)
            {
                _staticCacheDir  = WebSetting.CacheDir + "PageCache\\" + _threadEntity.URL.Dir.Replace('/', '\\');
                _staticCacheFile = filePath + (_threadEntity.URL.HasParam ? _threadEntity.URL.Param.Replace('?', '#') : string.Empty);
                _staticCachePath = _staticCacheDir + _staticCacheFile + ".xycache";
                if (!UpdateCache(_staticCachePath, DateTime.Now))
                {
                    if (System.IO.File.Exists(_staticCachePath))
                    {
                        DateTime _modifiedTime = System.IO.File.GetLastWriteTime(_staticCachePath);
                        if (Xy.Tools.IO.File.IsClientCached(_request.Headers["If-Modified-Since"], _modifiedTime) && !_webSetting.DebugMode)
                        {
                            _response.StatusCode      = 304;
                            _response.SuppressContent = true;
                        }
                        else
                        {
                            _response.Cache.SetLastModified(DateTime.Now);
                            if (_threadEntity.URLItem.Age.TotalMinutes > 0)
                            {
                                _response.Cache.SetMaxAge(_threadEntity.URLItem.Age);
                                _response.Cache.SetExpires(DateTime.Now.Add(_threadEntity.URLItem.Age));
                                _response.Expires         = Convert.ToInt32(_threadEntity.URLItem.Age.TotalMinutes);
                                _response.ExpiresAbsolute = DateTime.Now.Add(_threadEntity.URLItem.Age);
                                _response.AddHeader("Cache-Control", "max-age=" + _threadEntity.URLItem.Age.TotalMinutes);
                            }
                            _htmlContainer.Write(System.IO.File.ReadAllBytes(_staticCachePath));
                        }
                        return;
                    }
                }
            }

            onGetRequest();
#if DEBUG
            Xy.Tools.Debug.Log.WriteEventLog(map + " page process:onGetRequest finished");
#endif
            Validate();
#if DEBUG
            Xy.Tools.Debug.Log.WriteEventLog(map + " page process:Validate finished");
#endif
            string _sourcefile = string.Empty;
            if (!string.IsNullOrEmpty(filePath))
            {
                _sourcefile = LoadSourceFile((isIncludePage ? _webSetting.IncludeDir : _webSetting.PageDir) + filePath);
#if DEBUG
                Xy.Tools.Debug.Log.WriteEventLog(map + " page process:LoadSourceFile finished");
#endif
            }
            Control.ControlAnalyze _controls = Cache.PageAnalyze.GetInstance(_threadEntity, this, map);
            if (!_controls.IsHandled || WebSetting.DebugMode)
            {
                if (!string.IsNullOrEmpty(_sourcefile))
                {
                    _content = System.IO.File.ReadAllBytes(_sourcefile);
                    _controls.SetContent(_content);
                }
            }
            if (_contentChanged)
            {
                _controls.SetContent(_content);
            }
            if (enableScript)
            {
                if (!_controls.IsHandled)
                {
                    _controls.Analyze();
                }
                HandleControl(_controls.ControlCollection);
            }

#if DEBUG
            Xy.Tools.Debug.Log.WriteEventLog(map + " page process:HandleControl finished");
#endif
            _controls.Handle(this, _htmlContainer);
#if DEBUG
            Xy.Tools.Debug.Log.WriteEventLog(map + " controls handled");
#endif
            OutputHtml(_htmlContainer);
#if DEBUG
            Xy.Tools.Debug.Log.WriteEventLog(map + " page process:OutputHtml finished");
#endif

            if (_threadEntity.URLItem.EnableCache && !isIncludePage)
            {
                Xy.Tools.IO.File.ifNotExistsThenCreate(_staticCachePath);
                using (System.IO.FileStream fs = new System.IO.FileStream(_staticCachePath, System.IO.FileMode.Create, System.IO.FileAccess.Write, System.IO.FileShare.Read)) {
                    using (System.IO.StreamWriter sw = new System.IO.StreamWriter(fs)) {
                        try {
                            sw.Write(_htmlContainer.ToString());
                            sw.Flush();
                        } finally {
                            sw.Close();
                            fs.Close();
                        }
                    }
                }
#if DEBUG
                Xy.Tools.Debug.Log.WriteEventLog(map + " page cache writed");
#endif
            }
#if DEBUG
            Xy.Tools.Debug.Log.WriteEventLog(map + " end");
#endif
        }
示例#7
0
 public void Handle(ThreadEntity CurrentThreadEntity, Page.PageAbstract CurrentPageClass, HTMLContainer ContentContainer)
 {
     _threadEntity = CurrentThreadEntity;
     _threadEntity.ControlIndex++;
     if (_webSetting == null) _webSetting = CurrentPageClass.WebSetting;
     HTMLContainer _container = new HTMLContainer(_webSetting.Encoding);
     Xy.Web.Page.PageAbstract _page;
     if (string.IsNullOrEmpty(_type)) _type = "Xy.Web,Xy.Web.Page.EmptyPage";
     _page = Runtime.Web.PageClassLibrary.Get(_type);
     _page.Init(CurrentPageClass, _webSetting, _container);
     if (_extValues != null) {
         for (int i = 0; i < _extValues.Count; i++) {
             if (_page.Request.Values[_extValues.Keys[i]] != null) {
                 _page.Request.Values[_extValues.Keys[i]] = _extValues[i];
             } else {
                 _page.Request.Values.Add(_extValues.Keys[i], _extValues[i]);
             }
         }
     }
     string _staticCacheDir = string.Empty, _staticCacheFile = string.Empty, _staticCachePath = string.Empty;
     if (_cached) {
         _staticCacheDir = _webSetting.CacheDir + "IncludeCache\\" + _threadEntity.URL.Dir.Replace('/', '\\');
         _staticCacheFile = _file + _valueString;
         _staticCachePath = _staticCacheDir + _staticCacheFile + ".xycache";
         if (!_page.UpdateCache(_staticCachePath, DateTime.Now)) {
             if (System.IO.File.Exists(_staticCachePath)) {
                 ContentContainer.Write(System.IO.File.ReadAllBytes(_staticCachePath));
                 return;
             }
         }
     }
     if (_innerData != null && _innerData.HasContent) {
         _page.SetContent(_innerData);
     }
     _page.Handle(_map, _file, _enableScript, true);
     if (_cached) {
         Xy.Tools.IO.File.ifNotExistsThenCreate(_staticCachePath);
         using (System.IO.FileStream fs = new System.IO.FileStream(_staticCachePath, System.IO.FileMode.Create, System.IO.FileAccess.Write, System.IO.FileShare.Read)) {
             using (System.IO.StreamWriter sw = new System.IO.StreamWriter(fs)) {
                 try {
                     sw.Write(_container.ToString());
                     sw.Flush();
                 } finally {
                     sw.Close();
                     fs.Close();
                 }
             }
         }
     }
     ContentContainer.Write(_container);
     //ContentContainer.Write(_page.HTMLContainer);
     _threadEntity.ControlIndex--;
 }
示例#8
0
        public void Handle(ThreadEntity CurrentThreadEntity, Page.PageAbstract CurrentPageClass, HTMLContainer ContentContainer)
        {
            _threadEntity = CurrentThreadEntity;
            _threadEntity.ControlIndex++;
            if (_webSetting == null)
            {
                _webSetting = CurrentPageClass.WebSetting;
            }
            HTMLContainer _container = new HTMLContainer(_webSetting.Encoding);

            Xy.Web.Page.PageAbstract _page;
            if (string.IsNullOrEmpty(_type))
            {
                _type = "Xy.Web,Xy.Web.Page.EmptyPage";
            }
            _page = Runtime.Web.PageClassLibrary.Get(_type);
            _page.Init(CurrentPageClass, _webSetting, _container);
            if (_extValues != null)
            {
                for (int i = 0; i < _extValues.Count; i++)
                {
                    if (_page.Request.Values[_extValues.Keys[i]] != null)
                    {
                        _page.Request.Values[_extValues.Keys[i]] = _extValues[i];
                    }
                    else
                    {
                        _page.Request.Values.Add(_extValues.Keys[i], _extValues[i]);
                    }
                }
            }
            string _staticCacheDir = string.Empty, _staticCacheFile = string.Empty, _staticCachePath = string.Empty;

            if (_cached)
            {
                _staticCacheDir  = _webSetting.CacheDir + "IncludeCache\\" + _threadEntity.URL.Dir.Replace('/', '\\');
                _staticCacheFile = _file + _valueString;
                _staticCachePath = _staticCacheDir + _staticCacheFile + ".xycache";
                if (!_page.UpdateCache(_staticCachePath, DateTime.Now))
                {
                    if (System.IO.File.Exists(_staticCachePath))
                    {
                        ContentContainer.Write(System.IO.File.ReadAllBytes(_staticCachePath));
                        return;
                    }
                }
            }
            if (_innerData != null && _innerData.HasContent)
            {
                _page.SetContent(_innerData);
            }
            _page.Handle(_map, _file, _enableScript, true);
            if (_cached)
            {
                Xy.Tools.IO.File.ifNotExistsThenCreate(_staticCachePath);
                using (System.IO.FileStream fs = new System.IO.FileStream(_staticCachePath, System.IO.FileMode.Create, System.IO.FileAccess.Write, System.IO.FileShare.Read)) {
                    using (System.IO.StreamWriter sw = new System.IO.StreamWriter(fs)) {
                        try {
                            sw.Write(_container.ToString());
                            sw.Flush();
                        } finally {
                            sw.Close();
                            fs.Close();
                        }
                    }
                }
            }
            ContentContainer.Write(_container);
            //ContentContainer.Write(_page.HTMLContainer);
            _threadEntity.ControlIndex--;
        }