(defn xml-translator [cmp-fn xml cb]
  #[(xml-name xml) (map
    (fn [i]
      (if (eq (type i) "xml")
        (if (cmp-fn i) ;equal (#::id (meta i)) id)
          (cb i)
          (xml-translator cmp-fn i cb))
        i))
    xml)])

(defn $ [selector xml cb]
  (let [m (match "#(\\S+)" selector)]
  (if (> (length m) 0)
    (xml-translator (fn [i]
      (equal (#::id (meta i)) (#:0 m)))
      xml cb)
  (let [m (match "\\[([^=]+)=(\\S+)\\]" selector)]
  (if (> (length m) 0)
    (xml-translator (fn [i]
      (equal (#:(#:0 m) (meta i)) (#:1 m)))
      xml cb)
  xml)))))