/** * (c) Lexis Nexis Deutschland, 2005 */ package jaxe; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; public class NodeUtils { public static boolean isEqualNode(Node n1, Node n2) { if (n1 == n2) { return true; } if (n1.getNodeType() != n2.getNodeType()) { return false; } if (n2.getNodeName() == null) { if (n1.getNodeName() != null) { return false; } } else if (!n2.getNodeName().equals(n1.getNodeName())) { return false; } if (n2.getLocalName() == null) { if (n1.getLocalName() != null) { return false; } } else if (!n2.getLocalName().equals(n1.getLocalName())) { return false; } if (n2.getNamespaceURI() == null) { if (n1.getNamespaceURI() != null) { return false; } } else if (!n2.getNamespaceURI().equals(n1.getNamespaceURI())) { return false; } if (n2.getPrefix() == null) { if (n1.getPrefix() != null) { return false; } } else if (!n2.getPrefix().equals(n1.getPrefix())) { return false; } if (n2.getNodeValue() == null) { if (n1.getNodeValue() != null) { return false; } } else if (!n2.getNodeValue().equals(n1.getNodeValue())) { return false; } if (n1.getNodeType() == Node.ELEMENT_NODE) { Element e1 = (Element) n1; Element e2 = (Element) n2; boolean hasAttrs = e2.hasAttributes(); if (hasAttrs != ((Element) e1).hasAttributes()) { return false; } if (hasAttrs) { NamedNodeMap map1 = e2.getAttributes(); NamedNodeMap map2 = ((Element) e1).getAttributes(); int len = map1.getLength(); if (len != map2.getLength()) { return false; } for (int i = 0; i < len; i++) { Node nc1 = map1.item(i); if (nc1.getLocalName() == null) { // DOM Level 1 Node Node nc2 = map2.getNamedItem(nc1.getNodeName()); if (nc2 == null || !isEqualNode(nc1, nc2)) { return false; } } else { Node nc2 = map2.getNamedItemNS(nc1.getNamespaceURI(), nc1.getLocalName()); if (nc2 == null || !isEqualNode(nc1, nc2)) { return false; } } } } } return true; } }