Clojure:data.xml:创建名为“xlink:href”的键

时间:2012-06-03 05:08:58

标签: xml clojure xml-namespaces

上下文

我正在使用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”)

仍然是同样的错误。不知道发生了什么。

2 个答案:

答案 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)"})