code: Element evaluateXPathNodeNS(Node contextNode, NamespaceContext namespaceContext, String expression, Object... args) {
  		if (args.length > 0) {
  			expression = Strings.format(expression, args);
  		}
  
  		Node node = null;
  		try {
  			XPath xpath = XPathFactory.newInstance().newXPath();
  			if (namespaceContext != null) {
  				xpath.setNamespaceContext(namespaceContext);
  			}
  			Object result = xpath.evaluate(expression, contextNode, XPathConstants.NODE);
  			if (result == null) {
  				return null;
  			}
  			node = (Node) result;
  			if (node.getNodeType() != Node.ELEMENT_NODE) {
  				log.debug("XPath expression |%s| on |%s| yields a node that is not element. Force to null.", xpath, contextNode);
  				return null;
  			}
  		} catch (XPathExpressionException e) {
  			throw new DomException(e);
  		}
  		return getElement(node);
  	}
docs: Name space aware variant for {@link #evaluateXPathNode(Node, String, Object...)}.
  
  @param contextNode evaluation context node,
  @param namespaceContext name space context maps prefixes to name space URIs,
  @param expression XPath expression, formatting tags supported,
  @param args optional formatting arguments.
  @return evaluation result as element, possible null.