private static boolean attributesEqual(XQNode n1, XQNode n2, Collator collator) {
assert (n1.nodeKind() == NodeKind.ELEMENT && n2.nodeKind() == NodeKind.ELEMENT);
if(n1 instanceof DMElement) {
assert (n2 instanceof DMElement);
DMElement e1 = (DMElement) n1, e2 = (DMElement) n2;
Iterator<DMAttribute> a1Itor = e1.attribute().iterator();
Iterator<DMAttribute> a2Itor = e2.attribute().iterator();
while(a1Itor.hasNext()) {
if(!a2Itor.hasNext()) {
return false;
}
DMAttribute a1 = a1Itor.next();
DMAttribute a2 = a2Itor.next();
QualifiedName a1name = a1.nodeName();
QualifiedName a2name = a2.nodeName();
if(!a1name.equals(a2name)) {
return false;
}
String a1val = a1.getContent();
String a2val = a2.getContent();
assert (a1val != null);
if(collator != null) {
if(!collator.equals(a1val, a2val)) {
return false;
}
} else {
if(!a1val.equals(a2val)) {
return false;
}
}
}
} else {
// TODO performance improvement!
assert (n1 instanceof DTMElement && n2 instanceof DTMElement);
DTMElement e1 = (DTMElement) n1, e2 = (DTMElement) n2;
DTMAttribute att1 = null;
for(int i = 0; (att1 = e1.attribute(i)) != null; i++) {
DTMAttribute att2 = e2.attribute(i);
if(!att1.nodeName().equals(att2.nodeName())) {
return false;
}
final String att1val = att1.getContent();