/*
 * Copyright (c) 2015, 2020, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.  Oracle designates this
 * particular file as subject to the "Classpath" exception as provided
 * by Oracle in the LICENSE file that accompanied this code.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 */
package javax.xml.xpath;

import java.util.Objects;
import javax.xml.namespace.QName;
import org.w3c.dom.Node;
The XPathEvaluationResult interface represents the result of the evaluation of an XPath expression within the context of a particular node. The evaluation of an XPath expression can result in various result types as defined in XML Path Language (XPath) Version 1.0.
Type parameters:
  • <T> – the object type returned by the XPath evaluation.
See Also:
Since:9
/** * The {@code XPathEvaluationResult} interface represents the result of the * evaluation of an XPath expression within the context of a particular node. * The evaluation of an XPath expression can result in various result types as * defined in XML Path Language (XPath) Version 1.0. * * @param <T> the object type returned by the XPath evaluation. * @see <a href="http://www.w3.org/TR/xpath">XML Path Language (XPath) Version * 1.0</a> * * @since 9 */
public interface XPathEvaluationResult<T> {
XPathResultType represents possible return types of an XPath evaluation. Provided as an enum type, it allows the use of switch statement. At the same time, a mapping is provided between the original QName types in XPathConstants and class types used in the generic methods.
/** * XPathResultType represents possible return types of an XPath evaluation. * Provided as an enum type, it allows the use of switch statement. At the * same time, a mapping is provided between the original QName types in * {@link XPathConstants} and class types used in the generic methods. */
public static enum XPathResultType {
Any type that represents any of the 5 other types listed below. Maps to XPathEvaluationResult.
/** * Any type that represents any of the 5 other types listed below. * Maps to {@link XPathEvaluationResult}. */
ANY(new QName("http://www.w3.org/1999/XSL/Transform", "any"), XPathEvaluationResult.class),
The XPath 1.0 boolean data type. Maps to Java Boolean.
/** * The XPath 1.0 boolean data type. Maps to Java {@link Boolean}. */
BOOLEAN(XPathConstants.BOOLEAN, Boolean.class),
The XPath 1.0 Number data type. Maps to Java Number. Of the subtypes of Number, only Double, Integer and Long are required.
/** * The XPath 1.0 Number data type. Maps to Java {@link Number}. Of the * subtypes of Number, only Double, Integer and Long are required. */
NUMBER(XPathConstants.NUMBER, Number.class),
The XPath 1.0 String data type. Maps to Java String.
/** * The XPath 1.0 String data type. Maps to Java {@link String}. */
STRING(XPathConstants.STRING, String.class),
The XPath 1.0 NodeSet data type. Maps to NodeList.
/** * The XPath 1.0 NodeSet data type. Maps to {@link org.w3c.dom.NodeList}. */
NODESET(XPathConstants.NODESET, XPathNodes.class),
The XPath 1.0 NodeSet data type. Maps to Node.
/** * The XPath 1.0 NodeSet data type. Maps to {@link org.w3c.dom.Node}. */
NODE(XPathConstants.NODE, Node.class); final QName qnameType; final Class<?> clsType; XPathResultType(QName qnameType, Class<?> clsType) { this.qnameType = qnameType; this.clsType = clsType; }
Compares this type to the specified class type.
Params:
  • clsType – class type
Returns:true if the argument is not null and is a class type or accepted subtype that matches that this type represents, false otherwise.
/** * Compares this type to the specified class type. * @param clsType class type * @return true if the argument is not null and is a class type or accepted subtype that * matches that this type represents, false otherwise. */
private boolean equalsClassType(Class<?> clsType) { if (Objects.nonNull(clsType) && this.clsType.isAssignableFrom(clsType)) { if (this.clsType == Number.class) { return isAcceptedNumberSubType(clsType); } return true; } return false; }
Compares the specified class type to accepted subtypes of number.
Params:
  • clsType – class type
Returns:true if class type is an accepted subtype of Number, false otherwise
/** * Compares the specified class type to accepted subtypes of number. * @param clsType class type * @return true if class type is an accepted subtype of Number, false otherwise */
private boolean isAcceptedNumberSubType(Class<?> clsType) { return clsType.isAssignableFrom(Double.class) || clsType.isAssignableFrom(Integer.class) || clsType.isAssignableFrom(Long.class); }
Returns the QName type as specified in XPathConstants that corresponds to the specified class type.
Params:
  • clsType – a class type that the enum type supports
Returns:the QName type that matches with the specified class type, null if there is no match
/** * Returns the QName type as specified in {@link XPathConstants} that * corresponds to the specified class type. * @param clsType a class type that the enum type supports * @return the QName type that matches with the specified class type, * null if there is no match */
static public QName getQNameType(Class<?> clsType) { for (XPathResultType type : XPathResultType.values()) { if (type.equalsClassType(clsType)) { return type.qnameType; } } return null; } }
Return the result type as an enum specified by XPathResultType
Returns:the result type
/** * Return the result type as an enum specified by {@code XPathResultType} * @return the result type */
public XPathResultType type();
Returns the value of the result as the type <T> specified for the class.
Returns:The value of the result.
/** * Returns the value of the result as the type {@code <T>} specified for the class. * * @return The value of the result. */
public T value(); }