+ QName q1 = o1.getQName();
+ QName q2 = o2.getQName();
+ int result = q1.getLocalName().compareTo(q2.getLocalName());
+ if (result == 0) {
+ URI ns1 = q1.getNamespace();
+ URI ns2 = q2.getNamespace();
+ if (ns1 == null && ns2 == null) {
+ Date rev1 = q1.getRevision();
+ Date rev2 = q2.getRevision();
+
+ if (rev1 == null && rev2 == null) {
+ String p1 = q1.getPrefix();
+ String p2 = q2.getPrefix();
+ if (p1 == null && p2 == null) {
+ throw new IllegalArgumentException("Failed to sort nodes: " + o1 + ", " + o2);
+ }
+ if (p1 == null || p2 == null) {
+ if (p1 == null) {
+ return -1;
+ } else {
+ return 1;
+ }
+ }
+ return p1.compareTo(p2);
+ }
+ if (rev1 == null || rev2 == null) {
+ if (rev1 == null) {
+ return -1;
+ } else {
+ return -2;
+ }
+ }
+ return rev1.compareTo(rev2);
+ }
+ if (ns1 == null || ns2 == null) {
+ if (ns1 == null) {
+ return -1;
+ } else {
+ return 1;
+ }
+ }
+ return ns1.toString().compareTo(ns2.toString());
+ } else {
+ return result;
+ }