Class JaxenXPathFactory
- java.lang.Object
-
- org.jdom2.xpath.XPathFactory
-
- org.jdom2.xpath.jaxen.JaxenXPathFactory
-
public class JaxenXPathFactory extends XPathFactory
This simple Factory creates XPath instances tailored to the Jaxen library.- Author:
- Rolf Lear
-
-
Constructor Summary
Constructors Constructor Description JaxenXPathFactory()
The public default constructor used by the XPathFactory.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description <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.-
Methods inherited from class org.jdom2.xpath.XPathFactory
compile, compile, compile, instance, newInstance
-
-
-
-
Method Detail
-
compile
public <T> XPathExpression<T> compile(java.lang.String expression, Filter<T> filter, java.util.Map<java.lang.String,java.lang.Object> variables, Namespace... namespaces)
Description copied from class:XPathFactory
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.
A Filter is used to coerce resulting XPath data in to a suitable JDOM generic type. Note that the
Filters
class has a number of predefined, useful filters.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.
- Specified by:
compile
in classXPathFactory
- 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. Note that theFilters
class has a number of predefined, useful filters.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.
- See Also:
Filters
-
-