我有一个带有[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)
我做错了什么? 感谢。
答案 0 :(得分:4)
正如文档字符串中所述,clojure.data.xml/parse
接受InputStream
或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
用于查找类路径。