3

语境

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

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

4

2 回答 2

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是错误的,因为它没有引发异常。

于 2012-06-04T00:55:23.507 回答
0

试试这个:

(element :use {:xlink/href "#whiskers",
               :transform "scale(-1 1) translate(-140 0)"})
于 2012-06-03T07:23:18.627 回答