目标是生成具有在文档根处合并的命名空间和自定义前缀的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}}时,我已经验证了正确的玩家:确实生成了,但合并是目标。