Clojure语言四:解析XML

来源:互联网 发布:淘宝店铺客服怎么应聘 编辑:程序博客网 时间:2024/05/24 02:39

现在假定有一个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>

Clojure提供了clojure.xml来解析xml文件。

启动REPL会话,lein repl

输入下面的命令:

user=> (require 'clojure.xml)niluser=> (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"]}]}]}


clojure.xml文档参考这里:http://clojure.github.com/clojure/clojure.xml-api.html

返回的是一个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


原创粉丝点击