Class XPathFactory

  • Direct Known Subclasses:
    JaxenXPathFactory

    public abstract class XPathFactory
    extends java.lang.Object
    XPathFactory allows JDOM users to configure which XPath implementation to use when evaluating XPath expressions.

    JDOM does not extend the core Java XPath API (javax.xml.xpath.XPath). Instead it creates a new API that is more JDOM and Java friendly leading to neater and more understandable code (in a JDOM context).

    A JDOM XPathFactory instance is able to create JDOM XPathExpression instances that can be used to evaluate XPath expressions against JDOM Content.

    The XPathFactory allows either default or custom XPathFactory instances to be created. If you use the newInstance(String) method then an XPathFactory of that specific type will be created. If you use the instance() method then a default XPathFactory instance will be returned.

    Instances of XPathFactory are specified to be thread-safe. You can reuse an XPathFactory in multiple threads. Instances of XPathExpression are NOT thread-safe.

    Since:
    JDOM2
    Author:
    Rolf Lear
    • Constructor Summary

      Constructors 
      Constructor Description
      XPathFactory()  
    • Method Summary

      All Methods Static Methods Instance Methods Abstract Methods Concrete Methods 
      Modifier and Type Method Description
      XPathExpression<java.lang.Object> compile​(java.lang.String expression)
      Create a XPathExpression<Object> instance from this factory.
      <T> XPathExpression<T> compile​(java.lang.String expression, Filter<T> filter)
      Create a XPathExpression<T> instance from this factory.
      <T> XPathExpression<T> compile​(java.lang.String expression, Filter<T> filter, java.util.Map<java.lang.String,​java.lang.Object> variables, java.util.Collection<Namespace> namespaces)
      Create a XPathExpression<> instance from this factory.
      abstract <T> XPathExpression<T> compile​(java.lang.String expression, Filter<T> filter, java.util.Map<java.lang.String,​java.lang.Object> variables, Namespace... namespaces)
      Create a Compiled XPathExpression<> instance from this factory.
      static XPathFactory instance()
      Obtain an instance of an XPathFactory using the default mechanisms to determine what XPathFactory implementation to use.
      static XPathFactory newInstance​(java.lang.String factoryclass)
      Create a new instance of an explicit XPathFactory.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • XPathFactory

        public XPathFactory()
    • Method Detail

      • instance

        public static final XPathFactory instance()
        Obtain an instance of an XPathFactory using the default mechanisms to determine what XPathFactory implementation to use.

        The exact same XPathFactory instance will be returned from each call.

        The default mechanism will inspect the system property (only once) JDOMConstants.JDOM2_PROPERTY_XPATH_FACTORY to determine what class should be used for the XPathFactory. If that property is not set then JDOM will use the JaxenXPathFactory.

        Returns:
        the default XPathFactory instance
      • newInstance

        public static final XPathFactory newInstance​(java.lang.String factoryclass)
        Create a new instance of an explicit XPathFactory. A new instance of the specified XPathFactory is created each time. The target XPathFactory needs to have a no-argument default constructor.

        This method is a convenience mechanism only, and JDOM users are free to create a custom XPathFactory instance and use a simple:
        XPathFactory fac = new MyXPathFactory(arg1, arg2, ...)

        Parameters:
        factoryclass - The name of the XPathFactory class to create.
        Returns:
        An XPathFactory of the specified class.
      • compile

        public abstract <T> XPathExpression<T> compile​(java.lang.String expression,
                                                       Filter<T> filter,
                                                       java.util.Map<java.lang.String,​java.lang.Object> variables,
                                                       Namespace... namespaces)
        Create a Compiled XPathExpression<> instance from this factory. This is the only abstract method on this class. All other compile and evaluate methods prepare the data in some way to call this compile method.

        XPathFactory implementations override this method to implement support for the JDOM/XPath API.

        Namespace

        XPath expressions are always namespace aware, and expect to be able to resolve prefixes to namespace URIs. In XPath expressions the prefix "" always resolves to the empty Namespace URI "". A prefix in an XPath query is expected to resolve to exactly one URI. Multiple different prefixes in the expression may resolve to the same URI.

        This compile method ensures that these XPath/Namespace rules are followed and thus this method will throw IllegalArgumentException if:

        • a namespace has the empty-string prefix but has a non-empty URI.
        • more than one Namespace has any one prefix.

        Variables

        Variables are referenced from XPath expressions using a $varname syntax. The variable name may be a Namespace qualified variable name of the form $pfx:localname. Variables $pa:var and $pb:var are the identical variables if the namespace URI for prefix 'pa' is the same URI as for prefix 'pb'.

        This compile method expects all variable names to be expressed in a prefix-qualified format, where all prefixes have to be available in one of the specified Namespace instances.

        e.g. if you specify a variable name "ns:var" with value "value", you also need to have some namespace provided with the prefix "ns" such as Namespace.getNamespace("ns", "http://example.com/nsuri");

        Some XPath libraries allow null variable values (Jaxen), some do not (native Java). This compile method will silently convert any null Variable value to an empty string "".

        Variables are provided in the form of a Map where the key is the variable name and the mapped value is the variable value. If the entire map is null then the compile Method assumes there are no variables.

        In light of the above, this compile method will throw an IllegalArgumentException if:

        • a variable name is not a valid XML QName.
        • The prefix associated with a variable name is not available as a Namespace.
        A NullPointerException will be thrown if the map contains a null variable name
        Type Parameters:
        T - The generic type of the results that the XPathExpression will produce.
        Parameters:
        expression - The XPath expression.
        filter - The Filter that is used to coerce the xpath result data in to the generic-typed results.
        variables - Any variable values that may be referenced from the query. A null value indicates that there are no variables.
        namespaces - Any namespaces that may be referenced from the query
        Returns:
        an XPathExpression<> instance.
        Throws:
        java.lang.NullPointerException - if the query, filter, any namespace, any variable name or any variable value is null (although the entire variables value may be null).
        java.lang.IllegalArgumentException - if any two Namespace values share the same prefix, or if there is any other reason that the XPath query cannot be compiled.
      • compile

        public <T> XPathExpression<T> compile​(java.lang.String expression,
                                              Filter<T> filter,
                                              java.util.Map<java.lang.String,​java.lang.Object> variables,
                                              java.util.Collection<Namespace> namespaces)
        Create a XPathExpression<> instance from this factory.
        Type Parameters:
        T - The generic type of the results that the XPathExpression will produce.
        Parameters:
        expression - The XPath expression.
        filter - The Filter that is used to coerce the xpath result data in to the generic-typed results.
        variables - Any variable values that may be referenced from the query. A null value indicates that there are no variables.
        namespaces - List of all namespaces that may be referenced from the query
        Returns:
        an XPathExpression<T> instance.
        Throws:
        java.lang.NullPointerException - if the query, filter, namespaces, any variable name or any variable value is null (although the entire variables value may be null).
        java.lang.IllegalArgumentException - if any two Namespace values share the same prefix, or if there is any other reason that the XPath query cannot be compiled.
      • compile

        public <T> XPathExpression<T> compile​(java.lang.String expression,
                                              Filter<T> filter)
        Create a XPathExpression<T> instance from this factory.
        Type Parameters:
        T - The generic type of the results that the XPathExpression will produce.
        Parameters:
        expression - The XPath expression.
        filter - The Filter that is used to coerce the xpath result data in to the generic-typed results.
        Returns:
        an XPathExpression<T> instance.
        Throws:
        java.lang.NullPointerException - if the query or filter is null
        java.lang.IllegalArgumentException - if there is any reason that the XPath query cannot be compiled.
      • compile

        public XPathExpression<java.lang.Object> compile​(java.lang.String expression)
        Create a XPathExpression<Object> instance from this factory.
        Parameters:
        expression - The XPath expression.
        Returns:
        an XPathExpression<Object> instance.
        Throws:
        java.lang.NullPointerException - if the query or filter is null
        java.lang.IllegalArgumentException - if there is any reason that the XPath query cannot be compiled.