private static boolean equalElementAttributes(Element e1, Element e2) throws Exception {
boolean eq = true;
NamedNodeMap attrs = e1.getAttributes();
for (int i = 0; i < attrs.getLength(); i++) {
Attr a = (Attr) attrs.item(i);
if (a.getName().startsWith("xmlns")) {
// ignore namespace declaration
}
// xml:lang has no local name to get
else if (a.getName().equals("xml:lang")) {
if (!a.getValue().equals(e2.getAttributeNode(a.getName()).getValue())) {
checkpoint(eq = false);
break;
}
}
else if (a.getName().equals("xsi:type")) {
eq = true;
break;
}
else if (a.getName().equals("xml:base")) {
eq = true;
break;
}
else if (a.getName().equals("xml:id")) {
eq = a.getValue().equals(e2.getAttribute("xml:id"));
break;
}
else if (a.getName().indexOf(":") > 0) {
// qualified
// ignore schemaLocation hints
if ((a.getLocalName().equals("schemaLocation")
|| a.getLocalName().equals("noNamespaceSchemaLocation"))
&& a.getNamespaceURI().equals(schema.XSI)) {
continue;
}
if (!equal(a, e2.getAttributeNodeNS(a.getNamespaceURI(), a.getLocalName()))) {
checkpoint(eq = false);
break;
}
} else if (!equal(a, e2.getAttributeNode(a.getName()))
&& !equal(a, e2.getAttributeNodeNS(a.getNamespaceURI(),a.getName()))) {
checkpoint(eq = false);
break;
}
}
return checkpoint(eq);