在Clojure中讀取XML是很容易的。好比咱們有一個名叫strings.xml文件:html
1 <?xml version="1.0" encoding="utf-8"?> 2 <resources> 3 <string name="site-title">FY行情在線</string> 4 <string name="home">主頁</string> 5 </resources>
讀取的步驟以下:函數
1. 在project.clj中添加data.zip的依賴ui
[org.clojure/data.zip "0.1.1"]
2. 建立一個reader.clj程序(或是其它名字),代碼以下:spa
1 (ns demo.utilities.conf-string-reader 2 (:use [clojure.data.zip.xml :only (attr text xml->)]) ; dep: see below 3 (:require [clojure.xml :as xml] 4 [clojure.zip :as zip])) 5 6 (def xml (xml/parse " strings.xml")) 7 8 (def zipped (zip/xml-zip xml)) 9 10 (defn reader [] 11 (into {} 12 (for [[k v] 13 (map vector 14 (xml-> zipped :string (attr :name)) 15 (xml-> zipped :string text))] 16 [(keyword k) v])))
讓咱們調用一下reader函數吧,出來的結果就是{:site-title 「FY行情在線」, :home 「主頁」}。code
其中,指定讀取XML的內容的語句是(xml-> zipped :string text),輸出的結果爲[「FY行情在線」, 「主頁」],讀取XML的特定屬性的語句是(xml-> zipped :string (attr :name)),輸出的結果爲[「site-title」, 「home」]。xml
至於(into {}….)這個語句的做用是將兩個list合併成一個map,而for的做用是將第一個list的值所有轉換爲keyword。關於這塊能夠參考個人另外一篇文章:《Clojure:如何將兩個list合併成一個map》。htm