| 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" |