public object Evaluate(OPathExpression opathExpression, OPathOptions opathOptions, object defaultValue) { object opathValue = Evaluate(opathExpression, opathOptions, defaultValue, null); return(opathValue); }
private IDictionary <string, object> GetVariableValueDictionary(OPathExpression opathExpression, OPathOptions opathOptions, object defaultValue, ValueLogger valueLogger) { IDictionary <string, object> variableValueDictionary = new Dictionary <string, object>(); foreach (OPathVariable opathVariable in opathExpression.Variables) { object sourceObject = GetSourceObject(opathVariable); object variableValue = null; try { variableValue = EvaluateVariableReference( sourceObject, opathVariable, opathOptions, defaultValue, valueLogger, opathExpression.OPath); } catch (Exception ex) { throw new OPathException(string.Format( "Exception occurred evaluating variable reference {0}: {1}", opathVariable.GetReference(), ex.Message), ex); } variableValueDictionary.Add(opathVariable.XPathName, variableValue); } return(variableValueDictionary); }
private static bool IsReturnDefaultIfExceptionOptionSet(OPathOptions opathOptions) { bool isAnyExceptionEqualsNullOptionSet = (opathOptions & OPathOptions.ReturnDefaultIfException) == OPathOptions.ReturnDefaultIfException; return(isAnyExceptionEqualsNullOptionSet); }
private static bool IsReturnDefaultForNullOptionSet(OPathOptions opathOptions) { bool isAnyNullEqualsNullOptionSet = (opathOptions & OPathOptions.ReturnDefaultForNull) == OPathOptions.ReturnDefaultForNull; return(isAnyNullEqualsNullOptionSet); }
public static object Evaluate(OPathDocument opathDocument, OPathExpression opathExpression, OPathOptions opathOptions, object defaultValue) { OPathNavigator targetNavigator = CreateNavigator(opathDocument); object opathValue = targetNavigator.Evaluate(opathExpression, opathOptions, defaultValue, null); return(opathValue); }
private void AssertExpressionEquals(object expectedValue, string expression, OPathOptions opathOptions, object defaultValue) { OPathExpression opathExpression = OPathExpression.Compile(expression); object actualValue = OPathNavigator.Evaluate(m_OPathDocument, opathExpression, opathOptions, defaultValue, (string message) => Console.WriteLine(message)); Assert.AreEqual(expectedValue, actualValue, expression); }
private object EvaluateSingleVariable(OPathExpression opathExpression, OPathOptions opathOptions, object defaultValue, ValueLogger valueLogger) { OPathVariable opathVariable = opathExpression.Variables[0]; object sourceObject = GetSourceObject(opathVariable); object variableValue = EvaluateVariableReference( sourceObject, opathVariable, opathOptions, defaultValue, valueLogger, opathExpression.OPath); return(variableValue); }
private object EvaluateOPathExpression(OPathExpression opathExpression, OPathOptions opathOptions, object defaultValue, ValueLogger valueLogger) { XPathNavigator variableValueNavigator = (new XmlDocument()).CreateNavigator(); // Clone the XPath expression so we can set a context on it in a thread-safe manner XPathExpression clonedXPathExpression = opathExpression.XPathExpression.Clone(); IDictionary <string, object> variableValueDictionary = GetVariableValueDictionary(opathExpression, opathOptions, defaultValue, valueLogger); clonedXPathExpression.SetContext( new OPathXsltContext(variableValueDictionary, m_CustomFunctions, GetXPathValue)); object evaluatedExpression = variableValueNavigator.Evaluate(clonedXPathExpression); return(evaluatedExpression); }
public object Evaluate(OPathExpression opathExpression, OPathOptions opathOptions, object defaultValue, ValueLogger valueLogger) { object evaluatedExpression; if (m_OPathDocument == null) { m_OPathDocument = new OPathDocument(); } if (opathExpression.IsSingleVariable()) { evaluatedExpression = EvaluateSingleVariable(opathExpression, opathOptions, defaultValue, valueLogger); } else { evaluatedExpression = EvaluateOPathExpression(opathExpression, opathOptions, defaultValue, valueLogger); } return(evaluatedExpression); }
private object EvaluateVariableReference(object sourceObject, OPathVariable opathVariable, OPathOptions opathOptions, object defaultValue, ValueLogger valueLogger, string opath) { object opathValue = sourceObject; string evaluatedOPath = opathVariable.Name; foreach (OPathPart opathPart in opathVariable.OPathParts) { if (opathValue == null) { if (IsReturnDefaultForNullOptionSet(opathOptions)) { if (valueLogger != null) { string defaultForNullLogMessage = GetDefaultForNullLogMessage(opathVariable, evaluatedOPath, defaultValue); valueLogger(defaultForNullLogMessage); } opathValue = defaultValue; break; } else { throw new OPathException( string.Format("{0} evaluated to '{1}'.", evaluatedOPath, NULL_MESSAGE_STRING)); } } try { opathValue = opathPart.Evaluate(opathValue, evaluatedOPath); evaluatedOPath += opathPart; } catch (Exception ex) { if (IsReturnDefaultIfExceptionOptionSet(opathOptions)) { if (valueLogger != null) { string defaultIfExceptionLogMessage = GetDefaultIfExceptionLogMessage( opathVariable, evaluatedOPath, opathPart, defaultValue, ex); valueLogger(defaultIfExceptionLogMessage); } opathValue = defaultValue; break; } else { throw; } } } if (valueLogger != null) { valueLogger( string.Format("{0} evaluated to '{1}'", opathVariable.GetReference(), opathValue ?? NULL_MESSAGE_STRING)); } return(opathValue); }
private void AssertExpressionEquals(object expectedValue, string expression, OPathOptions opathOptions) { AssertExpressionEquals(expectedValue, expression, opathOptions, null); }