Clojureでxmlを読み込んで、zip-filterで検索

日記「Clojureでxmlを読み込んでみたのでメモ - oknknicの日記」では xml-seq と for による xml 検索をした。
今回は、 zip と zip-filter による検索をメモ。

利用例

  • project.clj の :dependencies への追記
[org.clojure/data.zip "0.1.0"]
  • サンプルファイル(in.xml)
<root>
  <records>
    <record id="1">record01</record>
    <record id="2">record02</record>
  </records>
  <record id="3">record03</record>
</root>
  • 実行例
(use 'clojure.data.zip.xml)
(require ['clojure.xml :as 'xml])
(require ['clojure.zip :as 'zip])

(xml-> (zip/xml-zip (xml/parse "in.xml")) :records :record text)
; -> ("record01" "record02")

(xml-> (zip/xml-zip (xml/parse "in.xml")) :record text)
; -> ("record03")

(xml-> (zip/xml-zip (xml/parse "in.xml")) :record (attr :id))
; -> ("3")