JXPath 1.1 Release Notes
Most changes in 1.1 are in the internal implementation and do not affect
public APIs. However there are some new publicly visible features:
-
Full support for JDOM. Just like with DOM, if a JDOM node
is the root node of a JXPathContext, the implementation strictly follows
the XPath 1.0 standard. A JDOM node can also be a part of a mixed model,
i.e. the value of a property, variable, container, collection element
etc.
-
Pointer has an additional method: getNode(), which returns the raw
value without converting it to a primitive value. This makes
a difference when you are working with DOM/JDOM and want to obtain
the Node itself, not the textual value of the Node.
-
Support for DynaBeans
(see Jakarta
Commons BeanUtils).
-
Refactored XML parsing by container to allow for alternate parsers.
All you do now is specify which model you want the container to use -
DOM (default) or JDOM. From that point the processing is transparent.
See
org.apache.commons.jxpath.xml.DocumentContainer.
-
The format-number XSLT function is now supported.
In order to provide full conformance with the standard, we also
needed to introduce the format customization mechanism known in
XSLT as <xsl:decimal-format> (see
W3Schools tutorial). The new methods of JXPathContext:
setDecimalFormatSymbols() and
getDecimalFormatSymbols() fulfill that requirement.
-
The attribute:: axis is now supported models other than
DOM/JDOM. For beans and maps it is interpreted the same way as
the "child::" axis.
-
In JXPath 1.0 you could only register DynamicPropertyHandlers for
concrete classes, now you can also register them for interfaces.
-
The implementation of setValue() has changed for DOM/JDOM
nodes. In JXPath 1.0 it would replace text in the element, but leave
sub-elements alone. The new implementation is more consistent: it
drops all subelements first. Also, if you pass a Node as the new
value, it will insert the Node in the tree.
-
If you need to evaluate multiple paths relative to a certain node
in the object graph, you can now create a relative JXPathContext.
Obtain the pointer for the location that is supposed to define
the relative context and then a relative context by calling
context.getRelativeContext(pointer).
-
The JUnit tests for JXPath have been completely redisigned and
significantly enhanced.
Acknowledgements
Great thanks to everybody who reported problems, helped to trace them,
suggested changed or simply provided encouragement. Special thanks to
- Trond Aasan
- Bjorn Bength
- Derek A. Bodin
- BoD
- Stephen Colebourne
- Torsten Curdt
- Pierre Delisle
- Ruud Diterwich
- Peter Donald
- Kate Dvortsova
- Eduardo Francos
- dIon Gillard
- Mike Hogan
- Ivelin Ivanov
- Per Kreipke
- Kees Kuip
- David Li
- Ulrich Nicolas Lisse
- Costin Manolache
- Thorsten Mauch
- Craig R. McClanahan
- Markus Menner
- Daniel Michalik
- Steve Pannier
- Ed Peters
- Kenneth Petersen
- Ovidiu Predescu
- Erik Pugh
- Robert Rasmussen
- Vasco C. Rocha
- Francois Swiegers
- Joern Turner
- Knut Wannheden
- Andrew Wulf
- Jason van Zyl
Thanks!
|