In section “Managing Per-Thread State with Vars” it explains clojure’s set! special form (p. 173). It explains the usage of set! inside clojure.xml, but omits that it must be inside a binding context, because if the current value of the var is the root binding, it will fail.
So, the actual usage inside clojure.xml is:
(binding [*stack* nil
*current* (struct element)
*state* :between
*sb* nil]
; After this point we can use set! on the vars inside the binding.
; Otherwise set! will print
; Can't change/establish root binding of: the-var-I-want-to-set with set
(startparse s content-handler)
((:content *current*) 0))