将脚本添加到lacij图

时间:2013-07-28 09:52:27

标签: clojure

据我所知,lacij库不支持“script”标签。所以我试图包含一个javascript src。  当我尝试以下

(def new-graph (lacij.edit/build old-graph))
(def element (tikkba.util.dom/elements (:xmldoc new-graph) tikkba.dom/svg-ns [:script {:src "myscript.js"}]))
(println element)
(tikkba.util.dom/append-child (:xmldoc new-graph) element)

(def new-graph (lacij.edit/build old-graph)) (def element (tikkba.util.dom/elements (:xmldoc new-graph) tikkba.dom/svg-ns [:script {:src "myscript.js"}])) (println element) (tikkba.util.dom/append-child (:xmldoc new-graph) element)

我得到一个“节点(类型:1,名称:脚本)无法插入,因为文档节点已经有一个类型为1的节点。”异常而不是我不知道为什么。 “脚本”节点首先不在Dom中。  我很感激这里的任何帮助。

1 个答案:

答案 0 :(得分:0)

好的 - 所以我有一些东西供你试试。我之前没有使用过lacij或者tikkba,所以我不确定它是不是惯用的。在Clojure中以这种方式变换xml文档让我感到有点不安 - 但我想这只是在进行java互操作时的方式。

无论如何,这里是:

首先使用lacij构建图形:

(use 'lacij.edit.graph)
(def g 
    (-> (graph) 
        (add-node :a "A" :x 50 :y 20) 
        (add-node :b "B" :x 50 :y 100) 
        (add-edge :a-to-b :a :b)
        (build)))

然后使用tikkba创建并添加脚本元素:

(use 'tikkba.utils.dom)
(def element 
    (elements 
       (:xmldoc g) 
       tikkba.dom/svg-ns 
       [:script {:src "myscript.js"}]))

(append-child (document-element (:xmldoc g)) element)

(spit-xml "test-with-script.svg" (:xmldoc g))

脚本将附加在文档的末尾。

<强>推理

我猜之前tikkba抱怨在XML文件的顶层添加。 xml文档中已有文档标记(<svg>),XML文件只能有一个根元素。上面的代码指示tikkba在 svg元素中添加而不是在顶层。它似乎工作。