尝试在clojure中发出xml时仍然得到ArrayIndexOutOfBoundsException

时间:2012-02-19 21:09:40

标签: xml clojure

Full stack trace

(ns test.xml.emit
  (:use clojure.core)
  (:require [clojure.xml :as xml]))

(defn testemit []
  (xml/emit {:tag :web-app
             :attrs {:xmlns:xsi "http://www.w3.org/2001/XMLSchema-instance"
                     :xmlns "http://java.sun.com/xml/ns/javaee"
                     :xmlns:web "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
                     :xsi:schemaLocation "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
                     :id "Foo"
                     :version "1.0"},
             :content [{:tag :display-name "FooBar+"}
                       {:tag :listener
                        :attrs {:listener-class "com.example.server.Main"}}
                       {:tag :filter
                        :attrs {:filter-name "guiceFilter"
                                :filter-class "com.google.inject.servlet.GuiceFilter"}}
                       {:tag :filter-mappings
                        :attrs {:filter-name "guiceFilter"
                                {:url-pattern "/*"}}}]}))

In our last episodeJustin Kramer非常友好地向我解释了clojure.xml / emit如何预期输入被格式化以便它可以生成可用的xml。我仍然得到同样的例外,但是在看完这个功能之后。我想知道web-app标签下的xmlns:xsi,xmlns:web和xsi:schemaLocation属性是否可能因为额外冒号而导致异常,但我不知道足够肯定。有人可以告诉我哪里出错了吗?感谢您的时间和考虑,祝您度过愉快的一天。

1 个答案:

答案 0 :(得分:3)

您的错误与您的语法有关 - 您的代码中有几个具有奇数个表单的映射,映射必须具有偶数(每个键必须具有值)。例如,您的一张地图:

{:tag :display-name "FooBar+"}

有3个条目,导致您看到的错误。另请注意:What happened to closure.xml/emit?

HTH,

凯尔