目标是生成带有在文档根处聚合的命名空间且具有自定义前缀的 XML,data.xml 提供了 {{aggregate-xmlns}} 用于此目的。遗憾的是,它似乎与 xmlns 前缀 {{:attrs}} 冲突。
要复现此问题,首先设置一些测试数据
`
(xml/alias-uri 'foo "http://foo", 'bar "http://bar")
(def document
(xml/element ::foo/x {}
(xml/element ::bar/y {} "...")))
`
使用 {{(xml/aggregate-xmlns document)}} 进行命名空间聚合正常工作,但现在我希望自定义前缀。这里 {{:attrs}} 消失了。
`
(xml/emit-str
(-> (xml/aggregate-xmlns document)
(assoc-in [:attrs :xmlns/bar] "http://bar")
(assoc-in [:attrs :xmlns/foo] "http://foo")))
`
`
<?xml version="1.0" encoding="UTF-8"?>
<a:x xmlns:a="http://foo" xmlns:b="http://bar">
<b:y>...</b:y>
</a:x>
`
将 {{aggregate-xmlns}} 放在最后会导致异常
`
(xml/emit-str
(xml/aggregate-xmlns
(-> document
(assoc-in [:attrs :xmlns/bar] "http://bar")
(assoc-in [:attrs :xmlns/foo] "http://foo"))))
`
ExceptionInfo xmlns 前缀 `xmlns` 绑定固定为 `http://www.w3.org/2000/xmlns/` clojure.core/ex-info
我已确认,当不使用 {{aggregate-xmlns}} 时,会生成正确的标题前缀 - 但聚合是目标。