1

据我所知,lacij 库不支持“脚本”标签。所以我试图包含一个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)

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

4

1 回答 1

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 文件只能有一个根元素。上面的代码指示 tikkbasvg 元素中添加而不是在顶层添加。它似乎工作。

于 2013-07-28T15:51:28.287 回答