Using aggregate-xmlns with larger xml trees causes the following exception:
Execution error (ExceptionInfo) at clojure.data.xml.name/legal-xmlns-binding! (name.cljc:151).
The xmlns binding for prefix `xml` is fixed to `http://www.w3.org/XML/1998/namespace`
aggregate-xmlns creates a new prefix for each tag with gen-prefix
:
(binding [*gen-prefix-counter* 0]
(-> (fn [tm uri]
(pu/assoc! tm (gen-prefix) uri))
qname-uri-xf
(reduce-tree (pu/transient pu/EMPTY) xml)
pu/persistent!))}))
gen-prefix
itself just deterministically joins characters to make up a new prefix string, e.g. "a", "b", "c" ...
Unfortunately the 7771th iteration generates the prefix string "xml", which is illegal to use and is rejected in clojure.data.xml.pu-map/assoc!
by the check in (name/legal-xmlns-binding! prefix uri)
, causing the above quoted exception. The same problem will happen later for "xmlns".
An easy workaround is to not do the checks in case the uri is blank.