Clojure语言四:解析XML

本文介绍如何使用Clojure的clojure.xml库解析XML文件。通过一个具体的例子展示了如何读取XML文件并将其转换为Clojure的数据结构。

现在假定有一个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)
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"]}]}]}


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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值