Sage.SageContext.ProcessContextIfNode C# (CSharp) Method

ProcessContextIfNode() private method

private ProcessContextIfNode ( SageContext context, XmlNode node ) : XmlNode
context SageContext
node System.Xml.XmlNode
return System.Xml.XmlNode
        internal static XmlNode ProcessContextIfNode(SageContext context, XmlNode node)
        {
            if (node.SelectSingleElement("ancestor::sage:literal", XmlNamespaces.Manager) != null)
                return node;

            XmlElement element = (XmlElement) node;
            XmlDocumentFragment result = node.OwnerDocument.CreateDocumentFragment();

            string expression = element.GetAttribute("expression");
            string propName = element.GetAttribute("property");
            string key = element.GetAttribute("key");
            string equals = element.GetAttribute("equals");
            string notEquals = element.GetAttribute("not-equals");
            bool nodeValid = false;

            if (!string.IsNullOrWhiteSpace(expression))
            {
                var text = context.textEvaluator.Process(expression);
                nodeValid = !string.IsNullOrWhiteSpace(text);
            }
            else
            {
                string propValue = SageContext.GetContextProperty(context, propName, key);
                if (notEquals != string.Empty)
                    nodeValid = !propValue.Equals(notEquals, StringComparison.InvariantCultureIgnoreCase);
                else if (equals != string.Empty)
                    nodeValid = propValue.Equals(equals, StringComparison.InvariantCultureIgnoreCase);
            }

            if (!nodeValid)
                return null;

            foreach (XmlNode child in node.SelectNodes("node()"))
                result.AppendChild(context.ProcessNode(child));

            return result;
        }