Sample: XmlSort | |
Category: cursor sample | |
Author: Radu Preotiuc-Pietro | |
Last Updated: Feb. 3, 2009 | |
Versions: | |
xmlbeans-v2 | |
----------------------------------------------------------------------------- | |
This is another practical sample on how to use XmlCursor. It sorts all the | |
children elements of a given parent in (reverse) alphabetical order. It uses | |
insertion sort to minimize the number of swaps (and because it is stable) and | |
XmlCursor.moveXml() to perform the swaps. | |
The algorithm works by conceptually separating the list of children into a | |
sorted list and an unsorted list. Each list is represented by an XmlCursor | |
positioned at the head of the list. At the beginning, the sorted list | |
contains the first child and the unsorted list contains the rest of the | |
children (if any). Then, each of the elements in the unsorted list is | |
inserted in the already-sorted list in its appropriate place using the | |
moveXml() method (the text following each element is then moved along with | |
the element). | |
To build this sample, call 'ant build' and to run it against the provided | |
sample XML file, call 'ant run'. | |
To run the sample from the command line using 'java', provide as the first | |
parameter the name of the XML file to process and as the second argument | |
(optional), an XPath pointing to the element whose children are to be sorted | |
(by default, the children of the root element are sorted). The XPath must | |
evaluate to an element and one element only, otherwise an error will be | |
reported. The console output will mirror the input file, with the children | |
of the given element sorted in ascending alphabetical order. | |
This sample can also be used as a library routine by calling its main | |
static method: XmlSort.sort(XmlObject, Comparator). The XmlObject whose | |
children are to be sorted is passed directly as a parameter and the | |
Comparator defines the order in which the elements are to be sorted. The | |
parameters to the compare() method are two XmlCursors pointing to the | |
two elements to be compared. The inner class XmlSort.QNameComparator | |
implements comparison based on the QName of the elements (ascending or | |
descending) but custom comparison methods (based for instance on the | |
value of some attribute etc) can also be passed in. | |
To try out this sample: | |
1. Set XMLBEANS_HOME in your environment | |
2. Ant must be on your PATH | |
3. To compile the sample source, run "ant build" | |
4. To execute the sample, run "ant run" |