跟我学XSL(四)-脚本与XSL的结合及应用
<xsl:eval>
含义:计算脚本表达式,输出一个文本字符串。
语法:
<xsl:eval language="language-name">
属性:
language ── 规定所用脚本语言的名字,可用的属性有"JavaScript"、"JScript"、"VBScript"、"VBS"等,缺省为"JScript"。
<xsl:script>
含义:声明全局变量或定义函数。
语法:
<xsl:script language="language-name">
属性:同<xsl:eval>
示例:
不知大家对于第四期《跟我学XML》中的例子是否还有印象?其中的XML文档并没有对简历编号,但输出中却加上了大写的罗马数字序号。今天将再举一稍为复杂一些的例子:
假如我们编写一份年终生产统计表,其中需要小计一项,常规的作法是事先将其算出来,现在不必了,我们可以只给出单项统计,显示时再统计小计一项。请找出《跟我学XML》的第四期,XML文件不必修改,对XSL文件的修改如下:
<?xml version="1.0" encoding="GB2312"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<HTML><HEAD><TITLE>1999年生产统计</TITLE></HEAD>
<BODY><xsl:apply-templates select="document"/></BODY>
</HTML>
</xsl:template>
<xsl:template match="document">
<H3>1999年生产统计</H3>
<TABLE border="1" cellspacing="0">
<TH>班组</TH>
<TH>一季度</TH>
<TH>二季度</TH>
<TH>三季度</TH>
<TH>四季度</TH>
<xsl:apply-templates select="report"/>
<TR><TD>小计</TD>
<TD><xsl:eval>total(this,"q1")</xsl:eval></TD>
<TD><xsl:eval>total(this,"q2")</xsl:eval></TD>
<TD><xsl:eval>total(this,"q3")</xsl:eval></TD>
<TD><xsl:eval>total(this,"q4")</xsl:eval></TD>
</TR>
</TABLE>
<xsl:script>
function total(node,q)
{
temp=0;
mark='/document/report/'+q;
v=node.selectNodes(mark);
for(t=v.nextNode();t;t=v.nextNode())
{
temp+=Number(t.text);
}
return temp; //小计值
}
</xsl:script>
</xsl:template>
<xsl:template match="report">
<TR>
<TD><xsl:value-of select="class"/></TD>
<TD><xsl:apply-templates select="q1"/></TD>
<TD><xsl:apply-templates select="q2"/></TD>
<TD><xsl:apply-templates select="q3"/></TD>
<TD><xsl:apply-templates select="q4"/></TD>
</TR>
</xsl:template>
<xsl:template match="q1|q2|q3|q4">
<!--此处测试产量,如小于等于20则添加一STYLE属性color,其值为red(红色)-->
<xsl:if test=".[value() $le$ 20]">
<xsl:attribute name="style">color:red</xsl:attribute>
</xsl:if>
<xsl:value-of/>
</xsl:template>
</xsl:stylesheet>
![](http://www.blueidea.com/articleimg/2004/04/1798/0007.gif)
上例在浏览器中的样子(IE5.0或更新版本)
说明:
注意到执行结果的变化了吗?黑体部分为添加部分,注意添加部分分为两部分,<xsl:script></xsl:script>必须置于</TABLE>之后,切记。
selectNodes() ── 是XMLDOMObject的一个方法,返回文档中所有满足条件的结点的集合,条件与< xsl:for-each >和select属性的取值采用同样的写法,可以加筛选、下标等限制,如寻找一季度产量大于等于50的班组:
/document/report/q1[value() $ge$ 50]
以上写法还有一个更简单的写法:
//q1[value()$ge$50]
//表示从根结点出发遍历所有结点,寻找满足条件的结点,如果文档内有同名但意义不同的结点则不能用此种方法,非不得已不建议使用。以此为例,如果希望统计年总产量,则可以下述字符串寻找结点(建议使用最后一种,此种描述将精确找到需要汇总的数据):
//*[value()$gt$0] 或 //(q1|q2|q3|q4) 或 /document/report/(q1|q2|q3|q4)
nextNode() ── 返回结点集中的下一个结点
Number() ── 将提供的参数转换为数值
下期介绍XSL函数2,用于<xsl:script>及<xsl:eval>中,以及<xsl:if>和<xsl:when>的expr属性。建议读者熟悉JavaScript、JScript、VBScript中至少一种,否你能用XSL完成的工作将十分有限。由于篇幅关系,此处不作详细介绍。
跟我学XSL(四)-脚本与XSL的结合及应用相关推荐
- 跟我学XSL(二) -XSL的运算符
表一.运算符与特殊字符 运算符 描述 / 选择子元素,返回左侧元素的直接子元素:如果"/"位于最左侧表示选择根结点的直接子元素 // 递归下降,不论深度,搜索指定的元素:如果位于 ...
- 学Java四个月了,再回头看看。
从去年决定学Java到现在(2007年3月31日)已整整四个月了,最深刻的一个感觉就是越学越多,自己知道的越少.另处一个体验就是自学太难了,没人指导,没人交流全靠自己摸索.我这样学,能有什么收获??? ...
- 1.辐射度学以及四个基本量
辐射度学是什么? 本篇博客在理论基础上加入自己的初步理解,致力于形象结束辐射度学相关概念. 如果看完还是觉得不清楚,可以访问个人博客:https://zhaishengfu.github.io查阅辐射 ...
- e会学上的c语言答案,e会学刷课脚本_e会学代刷
e会学刷课脚本_e会学代刷 2020-06-17 04:10:15 [刷课平台][在线刷课]68在Excel 2010中,假定一个单元格的地址表示为$D25,则该单元格的行地址为( ). A.D B. ...
- 重学Java(四):操作符
之前我写了一篇<重学Java(四):对象.引用.堆.栈.堆栈>,本以为凭借自己8年的Java编程经验足够把这些"吃人"的Java名词解释清楚了,但有网友不以为然,在文章 ...
- 考研失利后,我学了四个月
作者:阿秀 校招八股文学习网站:https://interviewguide.cn 你好,我是阿秀. 近两年计算机考研越来越火,很多学弟学妹也都会在大三时选择考研,去搏一搏. 尽管研究生持续在扩招,但 ...
- python语言怎么学-Py列为黑客应该学的四种编程语言之一 新手该怎么学
在开始前先简单和大家说一说:Python是什么.呢? 也许最初设计Python这种语言的人都没有想到今天Python会在工业和科研上获得如此广泛的使用.著名的自由软件作者Eric Raymond在他的 ...
- 学电脑从新手到高手_小白如何学手绘插画?新手到高手必学的四套教程【614期】...
想要快速查找设计素材? 置顶LH素材库 工欲善其事必先利其器!!今天我们为你精选了 手绘插画四套教程 大小:140G格式:视频和素材提供方式:百度网盘获取方式:请查看文章底部 随着设计行业的发展趋势, ...
- 努力学计算机四年,终于进腾讯了!
大家好,我是鱼皮,20 届本科毕业,目前是鹅厂的一名全栈应用开发. 前几天在某乎上看到一个问题:大学计算机系最努力的同学都是如何学习的? 看了几个高赞回答后,真的是感同身受,也想和大家分享一下自己大学 ...
最新文章
- R语言使用t.test函数计算两组独立数据的t检验(Independent t-test)
- 同步pod时区与node主机保持一致
- Linux/centos环境下maven安装与配置
- Typora 快捷键
- 项目移植,项目环境问题
- dataset.filter
- IntelliJ IDEA在行尾增加分号
- x·dy+y²·sinx·dx=0
- Android音视频三-AndroidStudio整合FFmpeg项目+FFmpeg视频解码
- 十大OpenGL教程
- 项目需求分析与建议 NABCD模型
- vue项目添加百度统计及设置埋点
- 3DsMax游戏模型制作技巧,掌握这些技术你也能接私活啦
- 笔记本上开启小键盘的快捷键
- 再见了,华为!活命要紧 ~
- HDU 2708 Vertical Histogram 【模拟 输出格式】
- 测试工程师需要掌握哪些软技能?
- Oracle索引(Index)创建使用
- Java Future详解与使用
- 加油卡html界面6,油卡核销.html
热门文章
- Swift 必备开发库 (高级篇)
- NSInputStream和NSMutableURLRequest-实现保存文件到服务器
- 文件翻译002片:Process Monitor帮助文档(Part 2)
- ISCW实验:配置Cisco IOS EASY ××× Server和Cisco ××× Client
- 如何在存储过程中得到被调用存储过程的结果集
- 转:读AD里特殊的属性in C#
- 0510JS基础:定义、输出、变量
- 使用WebRTC搭建前端视频聊天室——数据通道篇
- ui-router中使用ocLazyLoad和resolve
- C++编译期多态与运行期多态