使用aggregate-xmlns处理较大的XML树时引发以下异常
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使用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
本身只是按照确定性方式连接字符来生成新的前缀字符串,例如"a"、"b"、"c"...
遗憾的是,第7771次迭代生成的前缀字符串为"xml",这是不允许使用的,并且在clojure.data.xml.pu-map/assoc!
中被检查拒绝,引发了上述引用的异常。晚些时候还会发生类似的问题,针对"xmlns"。
一个简单的解决方案是:当URI为空时,不要进行检查。