Just a basic tree walk:
(setq tree
'((MainNode ((attribute1 . "values")
(attribute2 . "values"))
" " (SubNode1 ((attribute1 . "values"))
" " (Sub-SubNode1 ((attribute1 . "values"))
" "
(Node-Of-Interest
nil
" "
(Attribute1 ((value . "value1")))
" "
(Attribute2 ((value . "value2")))
" ")
" ")
" ")
" " (SubNode1 ((attribute1 . "values"))
" " (Sub-SubNode1 ((attribute1 . "values")))
" ")
" ")))
(defun my-recurse (lst fun)
(when (consp lst)
(append (and (funcall fun lst) (list lst))
(my-recurse (car lst) fun)
(my-recurse (cdr lst) fun))))
(require 'cl-lib)
(my-recurse
tree
(lambda (x)
(and (listp x) (symbolp (car x)) (listp (cdr x))
(cl-find-if
(lambda (y)
(and (consp y) (eq (car y) 'Node-Of-Interest)))
x))))
;; =>
;; ((Sub-SubNode1
;; ((attribute1 . "values"))
;; " " (Node-Of-Interest
;; nil " "
;; (Attribute1 ((value . "value1")))
;; " "
;; (Attribute2 ((value . "value2")))
;; " ")
;; " "))
Btw, your XML is broken according to the Emacs validator.