public Node getNodeById(Node node, String id) { Node currentNode = node; while(currentNode != null) { // Try hit-test if (hitTestNodeId(currentNode, id)) { // Hit! return currentNode; } Node nextNode = currentNode.getFirstChild(); if(nextNode != null) { currentNode = nextNode; continue; } while(currentNode != null) { nextNode = currentNode.getNextSibling(); if (nextNode != null) { currentNode = nextNode; break; } if (currentNode != null) { currentNode = currentNode.getParentNode(); if (node == currentNode) { return null; } } } } public boolean hitTestNodeId(Node node, String id) { if ( (node != null) && (node.getAttributes() != null) && (node.getAttributes().getNamedItem("id") != null) && (node.getAttributes().getNamedItem("id").getNodeValue()).equals(id)) { return true; } return false; }