Clojure:讀取xml

在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

相關文章
相關標籤/搜索