Clojure data.xml错误

时间:2013-08-07 01:25:07

标签: java xml xml-parsing clojure xmlstreamreader

我有一个带有[org.clojure / data.xml“0.0.7”]的leiningen项目作为依赖项和data / data-sample.xml中的xml文件

有效:

(require '[clojure.xml :as xml])
(xml/parse "data/small-sample.xml")

返回:

{:tag :data, :attrs nil, :content [{:tag :person, :attrs nil, :content [{:tag :given-name, :attrs nil, :content ["Gomez"]} {:tag :surname, :attrs nil, :content ["Addams"]} {:tag :relation, :attrs nil, :content ["father"]}]} {:tag :person, :attrs nil, :content [{:tag :given-name, :attrs nil, :content ["Morticia"]}...

这不起作用:

(require '[clojure.data.xml :as data.xml])
(data.xml/parse "data/small-sample.xml")

返回:

IllegalArgumentException No matching method found: createXMLStreamReader for class com.sun.xml.internal.stream.XMLInputFactoryImpl  clojure.lang.Reflector.invokeMatchingMethod (Reflector.java:80)

我做错了什么? 感谢。

1 个答案:

答案 0 :(得分:4)

正如文档字符串中所述,clojure.data.xml/parse接受InputStreamReader,因此您需要提供:

(require '[clojure.data.xml :as xml]
         '[clojure.java.io :as io])

(xml/parse (io/reader "data/small-sample.xml"))

请注意io/reader尝试将字符串视为URI作为第一个猜测,然后作为本地文件名。如果您想明确处理文件(io/file),可以使用(io/reader (io/file ...))。还有io/resource用于查找类路径。