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;
}