Clojure XMLparsing
我找不到任何有关如何parsingXML文档和访问元素的信息。
我已经find了两种方法来parsingXML文档
(clojure.zip/xml-zip (clojure.xml/parse file)) 和
 (parse-seq file) 
但我似乎可以find关于如何处理结果的任何信息?
源文件的引用是关于如何查询结果的zip-query.clj,但是这似乎也丢失了。
假设你有下面的xmlparsing你的文件:
 <high-node> <low-node>my text</low-node> </high-node> 
 你加载clojure.xml : 
 user=> (use 'clojure.xml) 
parsing时,xml将具有以下结构:
 {:tag :high-node, :attrs nil, :content [{:tag :low-node, :attrs nil, :content ["my text"]}]} 
 然后你可以查看文件的内容来获取low-node的内容: 
 user=> (for [x (xml-seq (parse (java.io.File. file))) :when (= :low-node (:tag x))] (first (:content x))) ("my text") 
 类似的,如果你想访问低节点上的整个信息列表,你可以改变:when predicate to (= (:high-node (:tag x))) : 
 user=> (for [x (xml-seq (parse (java.io.File. file))) :when (= :high-node (:tag x))] (first (:content x))) ({:tag :low-node, :attrs nil, :content ["my text"]}) 
这是可行的,因为关键字可以作为function。 查看关于Clojure和数据结构:关键字中的 列表和其他内容的问题
 上面的答案是有效的,但是我发现使用clojure.data.zip.xml (在Clojure 1.3之前是clojure-contrib.zip-filter.xml要clojure-contrib.zip-filter.xml 。 
文件:
  myfile.xml : 
 <songs> <track id="t1"><name>Track one</name></track> <track id="t2"><name>Track two</name></track> </songs> 
码:
 ; Clojure 1.3 (ns example (:use [clojure.data.zip.xml :only (attr text xml->)]) ; dep: see below (:require [clojure.xml :as xml] [clojure.zip :as zip])) (def xml (xml/parse "myfile.xml")) (def zipped (zip/xml-zip xml)) (xml-> zipped :track :name text) ; ("Track one" "Track two") (xml-> zipped :track (attr :id)) ; ("t1" "t2") 
不幸的是,你需要依赖data.zip来获得这个很好的读/过滤function。 这是值得的依赖:)在这将是(截至2013年8月17日):
 [org.clojure/data.zip "0.1.1"] 
 至于data.zip.xml文件…我只是看看这里相对较小的源文件,看看有什么可能的。 另一个很好的答案也在这里 。