/// <summary> /// Compile and execute an expression supplied as a String, with a given context item, where /// the expression is expected to return a single item as its result /// </summary> /// <param name="expression">A string containing the source text of the XPath expression</param> /// <param name="contextItem">The context item to be used for evaluation of the XPath expression. /// May be null, in which case the expression is evaluated without any context item.</param> /// <returns>If the XPath expression returns a singleton, then the the <c>XdmItem</c> /// which is the result of evaluating the XPath expression. If the expression returns an empty sequence, /// then null. If the expression returns a sequence containing more than one item, then the first /// item in the result.</returns> /// <exception cref="StaticError"> /// Throws a <c>Saxon.Api.StaticError</c> if there is any static error in the XPath expression. /// This includes both syntax errors, semantic errors such as references to undeclared functions or /// variables, and statically-detected type errors. /// </exception> /// <exception cref="DynamicError"> /// Throws a <c>Saxon.Api.DynamicError</c> if there is any dynamic error during evaluation of the XPath expression. /// This includes, for example, referring to the context item if no context item was supplied. /// </exception> public XdmItem EvaluateSingle(String expression, XdmItem contextItem) { XPathSelector xs = Compile(expression).Load(); if (contextItem != null) { xs.ContextItem = contextItem; } return(xs.EvaluateSingle()); }
private static int Saxon(XPathSelector sel) { var l = new List<int>(); for (int i = 0; i < numIters; ++i) { var result = sel.Evaluate(); l.Add(result.OfType<XdmValue>().Count()); } return l.FirstOrDefault(); }