예제 #1
0
        static XPathNodeIterator Select(string expression, XPathNavigator source, params XPathVariable[] variables)
		{
			var expr = source.Compile(expression);
			var context = new DynamicContext();
			foreach (var variable in variables)
				context.AddVariable(variable.Name, variable.Value);
			expr.SetContext(context);
			return source.Select(expr);
		}
        /// <summary>
        /// Selects a node set, using the specified XPath expression.
        /// </summary>
        /// <param name="navigator">A source XPathNavigator.</param>
        /// <param name="expression">An XPath expression.</param>
        /// <param name="variables">A set of XPathVariables.</param>
        /// <returns>An iterator over the nodes matching the specified expression.</returns>
        public static XPathNodeIterator Select(this XPathNavigator navigator, XPathExpression expression, params XPathVariable[] variables)
        {
            if (variables == null || variables.Length == 0 || variables[0] == null)
                return navigator.Select(expression);

            var compiled = expression.Clone(); // clone for thread-safety
            var context = new DynamicContext();
            foreach (var variable in variables)
                context.AddVariable(variable.Name, variable.Value);
            compiled.SetContext(context);
            return navigator.Select(compiled);
        }
예제 #3
0
        static XPathNodeIterator Select(string expression, XPathNavigator source, params XPathVariable[] variables)
        {
            var expr    = source.Compile(expression);
            var context = new DynamicContext();

            foreach (var variable in variables)
            {
                context.AddVariable(variable.Name, variable.Value);
            }
            expr.SetContext(context);
            return(source.Select(expr));
        }
        /// <summary>
        /// Selects a node set, using the specified XPath expression.
        /// </summary>
        /// <param name="navigator">A source XPathNavigator.</param>
        /// <param name="expression">An XPath expression.</param>
        /// <param name="variables">A set of XPathVariables.</param>
        /// <returns>An iterator over the nodes matching the specified expression.</returns>
        public static XPathNodeIterator Select(this XPathNavigator navigator, XPathExpression expression, params XPathVariable[] variables)
        {
            if (variables == null || variables.Length == 0 || variables[0] == null)
                return navigator.Select(expression);

            var compiled = expression.Clone(); // clone for thread-safety
            var context = new DynamicContext();
            foreach (var variable in variables)
                context.AddVariable(variable.Name, variable.Value);
            compiled.SetContext(context);
            return navigator.Select(compiled);
        }
        /// <summary>
        /// Selects a node set, using the specified XPath expression.
        /// </summary>
        /// <param name="navigator">A source XPathNavigator.</param>
        /// <param name="expression">An XPath expression.</param>
        /// <param name="variables">A set of XPathVariables.</param>
        /// <returns>An iterator over the nodes matching the specified expression.</returns>
        public static XPathNodeIterator Select(this XPathNavigator navigator, string expression, params XPathVariable[] variables)
        {
            if (variables == null || variables.Length == 0 || variables[0] == null)
                return navigator.Select(expression);

            // Reflector shows that the standard XPathNavigator.Compile method just does
            //   return XPathExpression.Compile(xpath);
            // only difference is, XPathNavigator.Compile is virtual so it could be overriden
            // by a class inheriting from XPathNavigator... there does not seem to be any
            // doing it in the Framework, though... so we'll assume it's much cleaner to use
            // the static compile:
            var compiled = XPathExpression.Compile(expression);

            var context = new DynamicContext();
            foreach (var variable in variables)
                context.AddVariable(variable.Name, variable.Value);
            compiled.SetContext(context);
            return navigator.Select(compiled);
        }
        /// <summary>
        /// Selects a node set, using the specified XPath expression.
        /// </summary>
        /// <param name="navigator">A source XPathNavigator.</param>
        /// <param name="expression">An XPath expression.</param>
        /// <param name="variables">A set of XPathVariables.</param>
        /// <returns>An iterator over the nodes matching the specified expression.</returns>
        public static XPathNodeIterator Select(this XPathNavigator navigator, string expression, params XPathVariable[] variables)
        {
            if (variables == null || variables.Length == 0 || variables[0] == null)
                return navigator.Select(expression);

            // Reflector shows that the standard XPathNavigator.Compile method just does
            //   return XPathExpression.Compile(xpath);
            // only difference is, XPathNavigator.Compile is virtual so it could be overriden
            // by a class inheriting from XPathNavigator... there does not seem to be any
            // doing it in the Framework, though... so we'll assume it's much cleaner to use
            // the static compile:
            var compiled = XPathExpression.Compile(expression);

            var context = new DynamicContext();
            foreach (var variable in variables)
                context.AddVariable(variable.Name, variable.Value);
            compiled.SetContext(context);
            return navigator.Select(compiled);
        }