Clojure:读取xml
在Clojure中读取XML是很容易的。比如我们有一个名叫strings.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="site-title">FY行情在线</string>
<string name="home">主页</string>
</resources>
读取的步骤如下:
1. 在project.clj中添加data.zip的依赖
[org.clojure/data.zip "0.1.1"]
2. 创建一个reader.clj程序(或是其它名字),代码如下:
(ns demo.utilities.conf-string-reader
(:use [clojure.data.zip.xml :only (attr text xml->)]) ; dep: see below
(:require [clojure.xml :as xml]
[clojure.zip :as zip])) (def xml (xml/parse " strings.xml")) (def zipped (zip/xml-zip xml)) (defn reader []
(into {}
(for [[k v]
(map vector
(xml-> zipped :string (attr :name))
(xml-> zipped :string text))]
[(keyword k) v])))
让我们调用一下reader函数吧,出来的结果就是{:site-title “FY行情在线”, :home “主页”}。
其中,指定读取XML的内容的语句是(xml-> zipped :string text),输出的结果为[“FY行情在线”, “主页”],读取XML的特定属性的语句是(xml-> zipped :string (attr :name)),输出的结果为[“site-title”, “home”]。
至于(into {}….)这个语句的作用是将两个list合并成一个map,而for的作用是将第一个list的值全部转换为keyword。关于这块可以参考我的另一篇文章:《Clojure:如何将两个list合并成一个map》。
Clojure:读取xml的更多相关文章
- 读取xml数据装配到字典中之应用场景
前段时间看到支付宝设置里面有个多语言这个功能,蛮有意思的,就想双休没事的话做个相关的demo玩玩,可是礼拜六被妹子拽出去玩了一天,来大上海有大半年了,基本没有出去玩过,妹子说我是超级宅男,也不带她出去 ...
- 自己动手之使用反射和泛型,动态读取XML创建类实例并赋值
前言: 最近小匹夫参与的游戏项目到了需要读取数据的阶段了,那么觉得自己业余时间也该实践下数据相关的内容.那么从哪入手呢?因为用的是Unity3d的游戏引擎,思来想去就选择了C#读取XML文件这个小功能 ...
- MFC如何读取XML
<?xml version="1.0" encoding="utf-8"?> <Cases> <case> <No&g ...
- 使用dom4j读取xml连接数据库与之单例模式
使用dom4j读取xml ,加入jar包 dom4j-1.6.1.jar jaxen-1.1-beta-6.jar public class XmlConfigReader { //懒汉式,延迟加载 ...
- java DOM4J 读取XML
最近学习Java,在处理XML文档的时候,查阅相关资料,发现了DOM4J这个jre库,相对C#的XML处理来说,功能还算是跟得上 下面展示一篇我自己写的一个XML读取测试 import java.ut ...
- C#中常用的读取xml的几种方法(转)
本文完全来源于http://blog.csdn.net/tiemufeng1122/article/details/6723764,仅作个人学习之用. XML文件是一种常用的文件格式,例如WinFor ...
- wcf序列化大对象时报错:读取 XML 数据时,超出最大
错误为: 访问服务异常:格式化程序尝试对消息反序列化时引发异常: 尝试对参数 http://tempuri.org/ 进行反序列化时出 错: request.InnerException 消息是“反序 ...
- C#中常用的几种读取XML文件的方法
1.C#中常用的几种读取XML文件的方法:http://blog.csdn.net/tiemufeng1122/article/details/6723764/
- 利用反射与dom4j读取javabean生成对应XML和读取XML得到对应的javabean对象集合
转自:http://blog.csdn.net/zhao19861029/article/details/8473245 首先实现生成对应的JAVAbean的XML文件方法 /** * DMO4J写入 ...
随机推荐
- 拼接sql ()
SELECT ID,FORMNAME,NODENAME,SEQUENCE, NAME, STATE, NOWTIMES, WORK.FQREALNAME||'('||FQDEPT.FULLN ...
- 查询分析器执行SQL很快但是ado.net很慢:请为你的SQLparameter设置DbType
我们都知道,参数化查询可以处理SQL注入,以及提高查询的效率,因为参数化查询会使MSSQL缓存查询的计划. 但是会出现一个问题:有的时候参数化查询比直接拼接sql字符串效率低好多,甚至是查询超时. 原 ...
- java 多线程并发系列之 生产者消费者模式的两种实现
在并发编程中使用生产者和消费者模式能够解决绝大多数并发问题.该模式通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度. 为什么要使用生产者和消费者模式 在线程世界里,生产者就是生产数据 ...
- TCP协议滑动窗口(一)——控制大批量数据传输速率
窗口大小:TCP头中一个16位的域,表示当前可用接受缓冲区大小.在每个TCP对等段连接初始化时,告诉对方自己的窗口大小(不一定是满额,假如满额65201字节,可能暂时通告5840字节).若客户端接受数 ...
- enc28j60网卡驱动模块添加进linux内核,Kconfig,Makefile配置过程
这里是要把http://www.cnblogs.com/hackfun/p/6260396.html中的enc28j60网卡驱动模块,添加到2.6.22.6内核中,这个模块代码不需要任何修改.只需要在 ...
- WEB开发模式浅析
WEB技术随着互联网的崛起而崛起,又随着移动互联网的发展而呈现更加多样化的趋势. 黑暗时代:大约在2005年以前,所谓的WEB开发主要还是美工的活,HTML/CSS占主导,Dreamwaver做为页面 ...
- python 求一个文件中每个字符出现的次数
import pprint import collections filename = input('Input filename') with open(filename) as info: cou ...
- codeforces_731D_(前缀和)(树状数组)
D. 80-th Level Archeology time limit per test 2 seconds memory limit per test 256 megabytes input st ...
- PHP 之用证书对数据进行签名、验签、加密、解密
/** * 对数据进行签名 * $data = 'If you are still new to things, we’ve provided a few walkthroughs to get yo ...
- ionic 创建某个文件下的page
ionic g page 文件名 --pagesDir src/pages/about