示例#1
0
        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);
        }
示例#2
0
        public object Evaluate(OPathExpression opathExpression, OPathOptions opathOptions,
                               object defaultValue)
        {
            object opathValue = Evaluate(opathExpression, opathOptions, defaultValue, null);

            return(opathValue);
        }
示例#3
0
        public static OPathExpression Compile(string opath)
        {
            OPathParseResult parseResult = OPathParser.Parse(opath);

            string xpath = parseResult.GetXPath();

            OPathVariable[] opathVariables = parseResult.GetVariables();

            XPathExpression xpathExpression = null;

            try
            {
                xpathExpression = XPathExpression.Compile(xpath);
            }
            catch (XPathException ex)
            {
                throw new OPathException(string.Format(
                                             "An XPathException was thrown when compiling the expression '{0}': {1}",
                                             xpath, ex.Message), ex);
            }

            OPathExpression opathExpression = new OPathExpression(opath, opathVariables, xpathExpression);

            return(opathExpression);
        }
示例#4
0
        public static object Evaluate(OPathDocument opathDocument, OPathExpression opathExpression)
        {
            OPathNavigator targetNavigator = CreateNavigator(opathDocument);

            object opathValue = targetNavigator.Evaluate(opathExpression, OPathOptions.Defaults);

            return(opathValue);
        }
示例#5
0
        public static object Evaluate(OPathDocument opathDocument, OPathExpression opathExpression,
                                      OPathOptions opathOptions, object defaultValue, ValueLogger valueLogger)
        {
            OPathNavigator targetNavigator = CreateNavigator(opathDocument);

            object opathValue =
                targetNavigator.Evaluate(opathExpression, opathOptions, defaultValue, valueLogger);

            return(opathValue);
        }
示例#6
0
        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);
        }
示例#7
0
        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);
        }
示例#8
0
        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);
        }
示例#9
0
        public object Evaluate(OPathExpression opathExpression)
        {
            object opathValue = Evaluate(opathExpression, OPathOptions.Defaults);

            return(opathValue);
        }