在XSL使用数组

转:http://oss.lzu.edu.cn/blog/article.php?tid_1721.html

 

    XSL是用来解释XML文件的语言,不过它支持的东西“太有限”了,比如,它没有提供比较直观的数组数据类型。而数组数据类型却非常有用,例如:
    我们想监测某个机器的网络流量,在XML文件中我们想把单位信息和字节信息分离开来,以便在XSL中用这些信息来绘图和进行相关计算。这些单位信息有KB,MB,GB(对应1,1024,1048576)等,如果流量信息特别多,我们直接发送单位信息似乎是不太好的,因为会存在很大的“冗余”,所以会考虑采取“映射“来减少XML文件的字节数中。例如:

0 --> KB, 1
1 --> MB, 1024
2 --> GB, 1048576

 

 

在遇到单位的地方,全部转换为前面的0,1,2,这样每个单位信息都可以减少一个字节。然后在XSL具体解释时,把它们转换回去,但是如何转换呢?XSL没有提供数组,我们没有办法直接把0,1,2简单地作为下标从数组中取单位信息。也许你说,为什么不用条件判断呢?这个是可以,但是会影响解释XML文件的效率。
    在msxsl(IE)和exsl(Opera)中,都提供了node-set()这样一个函数来使用如下一个数组变量:


Code:

 

关于node-set()的具体用法请参考资料[1]。
    不过firefox目前并不支持这个,所以还是得寻找替代方案。通过查找资料发现,key()函数[2]可以有效地解决这个问题。
    它的工作原理是:

    首先通过XML中的数据来建立索引,然后在template中通过给key函数传递索引值来引用索引中的数据,从而可以实现“映射”。

    还是以前面的单位信息为例,先在XML文件中设计好这么一个映射数据:


Code:

 

<units>节点中的每条信息就是一个单位,其中id作为索引值,而后面分别对应单位名称和具体单位数值。
    这样在XSL中我们就可以先通过下面的语句来创建一个索引:


Code:

 

创建好索引以后就可以在template中使用了:


Code:

 

例子下载:http://download.csdn.net/source/1462623

 

参考资料
[1] node-set() function in XSL
http://dpcarlisle.blogspot.com/2007/05/exslt-node-set-function.html


[2] key() function in XSL
http://www.w3schools.com/xsl/el_key.asp

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值