52 lines
2.4 KiB
Plaintext
52 lines
2.4 KiB
Plaintext
|
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"
|