/** Evaluate an XPath expression and return its string value. */ public static String evaluateAsString( PropertyContext propertyContext, List<Item> contextItems, int contextPosition, String xpathString, Map<String, String> prefixToURIMap, Map<String, ValueRepresentation> variableToValueMap, FunctionLibrary functionLibrary, FunctionContext functionContext, String baseURI, LocationData locationData) { final PooledXPathExpression xpathExpression = XPathCache.getXPathExpression( propertyContext, contextItems, contextPosition, "string(subsequence(" + xpathString + ", 1, 1))", prefixToURIMap, variableToValueMap, functionLibrary, baseURI, false, false, locationData); try { final Object result = xpathExpression.evaluateSingleKeepNodeInfo(functionContext); return (result != null) ? result.toString() : null; } catch (XPathException e) { throw handleXPathException(e, xpathString, "evaluating XPath expression", locationData); } finally { if (xpathExpression != null) xpathExpression.returnToPool(); } }