我正在使用data.xml从clojure输出xml文件。我需要输出以下行:
<use xlink:href="#whiskers" transform="scale(-1 1) translate(-140 0)" />
(我们在SVG画一只猫)。
现在,我的尝试类似于:
(indent-str (element :use {:xlink:href "#whiskers",
:transform "scale(-1 1) translate(-140 0)"}))
这失败是因为 :xlink:href“#whiwksers” 显然被解释为: :xlink, :href“#whiskers”
如何创建一个clojure符号以输出“xlink:href”作为data.xml的字段?
我试过了: (关键字“xlink:href”)
仍然是同样的错误。不知道发生了什么。
答案 0 :(得分:1)
我不确定这里有错误。
(def e (element :use {:xlink:href "#whiskers",
:transform "scale(-1 1) translate(-140 0)"}))
(println (emit-str e))
=> <?xml version="1.0" encoding="UTF-8"?><use xlink:href="#whiskers" transform="scale(-1 1) translate(-140 0)"></use>
indent-str
函数存在问题:
(println (indent-str e))
org.xml.sax.SAXParseException: The prefix "xlink" for attribute "xlink:href"
associated with an element type "use" is not bound.
所以看起来clojure.data.xml
是名称空间感知的。我们试试这个:
(def e-the-sequel (element :use {:xmlns:xlink "http://testing",
:xlink:href "#whiskers",
:transform "scale(-1 1) translate(-140 0)"}))
(println (indent-str e-the-sequel))
=> <?xml version="1.0" encoding="UTF-8"?>
<use xmlns:xlink="http://testing" xlink:href="#whiskers"
transform="scale(-1 1) translate(-140 0)"/>
那更好。如果有的话,我想你可以说emit-str
是错的,因为它没有抛出异常。
答案 1 :(得分:0)
试试这个:
(element :use {:xlink/href "#whiskers",
:transform "scale(-1 1) translate(-140 0)"})