(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 episode,Justin Kramer非常友好地向我解释了clojure.xml / emit如何预期输入被格式化以便它可以生成可用的xml。我仍然得到同样的例外,但是在看完这个功能之后。我想知道web-app标签下的xmlns:xsi,xmlns:web和xsi:schemaLocation属性是否可能因为额外冒号而导致异常,但我不知道足够肯定。有人可以告诉我哪里出错了吗?感谢您的时间和考虑,祝您度过愉快的一天。
答案 0 :(得分:3)
您的错误与您的语法有关 - 您的代码中有几个具有奇数个表单的映射,映射必须具有偶数(每个键必须具有值)。例如,您的一张地图:
{:tag :display-name "FooBar+"}
有3个条目,导致您看到的错误。另请注意:What happened to closure.xml/emit?
HTH,
凯尔