现在假定有一个xml文件内容如下:
<?xml version="1.0" encoding="utf-8"?> <service> <mongodb> <uri>localhost</uri> </mongodb> <socket> <port_number>7777</port_number> <login_timeout>200</login_timeout> <check_timeout>200</check_timeout> </socket> </service>
启动REPL会话,lein repl
输入下面的命令:
user=> (require 'clojure.xml) nil user=> (clojure.xml/parse "/home/chenshu/a.xml") {:tag :service, :attrs nil, :content [{:tag :mongodb, :attrs nil, :content [{:tag :uri, :attrs nil, :content ["localhost"]}]} {:tag :socket, :attrs nil, :content [{:tag :port_number, :attrs nil, :content ["7777"]} {:tag :login_timeout, :attrs nil, :content ["200"]} {:tag :check_timeout, :attrs nil, :content ["200"]}]}]}
返回的是一个tree, 用emacs格式化一下看看:
{ :tag :service, :attrs nil, :content [ { :tag :mongodb, :attrs nil, :content [ {:tag :uri, :attrs nil, :content ["localhost"]} ] } { :tag :socket, :attrs nil, :content [ {:tag :port_number, :attrs nil, :content ["7777"]} {:tag :login_timeout, :attrs nil, :content ["200"]} {:tag :check_timeout, :attrs nil, :content ["200"]} ] } ] }有点像JSON,但并不是。
首先这是一个{ }括起来的map,有三个key,分别是:tag, :attrs和:content
:tag的值就是service, 注意前面有:前缀
:attrs的值是nil
:content的值是一个vector,里面包含了两个map
第一个map对应名为mongodb的xml元素
第二个map对应名为socket的xml元素
注意,使用clojure.xml之前需要通过requrie引入这个library,并且运行parse函数时前面要加上namespace
如果不想每次调用函数parse的时候都输入namespace,运行一次下面的程序即可:
user=> (use 'clojure.xml) nil