1

我有一个 leiningen 项目,其中 [org.clojure/data.xml "0.0.7"] 作为依赖项,并且在 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)

我究竟做错了什么?谢谢。

4

1 回答 1

4

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

(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用于在类路径上查找内容。

于 2013-08-07T02:23:49.693 回答