有时,我们可能会希望XML文档输出时能对其中内容加上一些统计信息或者如编号什么的,利用前面的知识就不太容易实现了。今天将介绍两个新元素<xsl:eval>与<xsl:script>,使我们能轻松处理这个难题。

<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>


上例在浏览器中的样子(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的结合及应用相关推荐

  1. 跟我学XSL(二) -XSL的运算符

    表一.运算符与特殊字符  运算符 描述 / 选择子元素,返回左侧元素的直接子元素:如果"/"位于最左侧表示选择根结点的直接子元素 // 递归下降,不论深度,搜索指定的元素:如果位于 ...

  2. 学Java四个月了,再回头看看。

    从去年决定学Java到现在(2007年3月31日)已整整四个月了,最深刻的一个感觉就是越学越多,自己知道的越少.另处一个体验就是自学太难了,没人指导,没人交流全靠自己摸索.我这样学,能有什么收获??? ...

  3. 1.辐射度学以及四个基本量

    辐射度学是什么? 本篇博客在理论基础上加入自己的初步理解,致力于形象结束辐射度学相关概念. 如果看完还是觉得不清楚,可以访问个人博客:https://zhaishengfu.github.io查阅辐射 ...

  4. e会学上的c语言答案,e会学刷课脚本_e会学代刷

    e会学刷课脚本_e会学代刷 2020-06-17 04:10:15 [刷课平台][在线刷课]68在Excel 2010中,假定一个单元格的地址表示为$D25,则该单元格的行地址为( ). A.D B. ...

  5. 重学Java(四):操作符

    之前我写了一篇<重学Java(四):对象.引用.堆.栈.堆栈>,本以为凭借自己8年的Java编程经验足够把这些"吃人"的Java名词解释清楚了,但有网友不以为然,在文章 ...

  6. 考研失利后,我学了四个月

    作者:阿秀 校招八股文学习网站:https://interviewguide.cn 你好,我是阿秀. 近两年计算机考研越来越火,很多学弟学妹也都会在大三时选择考研,去搏一搏. 尽管研究生持续在扩招,但 ...

  7. python语言怎么学-Py列为黑客应该学的四种编程语言之一 新手该怎么学

    在开始前先简单和大家说一说:Python是什么.呢? 也许最初设计Python这种语言的人都没有想到今天Python会在工业和科研上获得如此广泛的使用.著名的自由软件作者Eric Raymond在他的 ...

  8. 学电脑从新手到高手_小白如何学手绘插画?新手到高手必学的四套教程【614期】...

    想要快速查找设计素材? 置顶LH素材库 工欲善其事必先利其器!!今天我们为你精选了 手绘插画四套教程 大小:140G格式:视频和素材提供方式:百度网盘获取方式:请查看文章底部 随着设计行业的发展趋势, ...

  9. 努力学计算机四年,终于进腾讯了!

    大家好,我是鱼皮,20 届本科毕业,目前是鹅厂的一名全栈应用开发. 前几天在某乎上看到一个问题:大学计算机系最努力的同学都是如何学习的? 看了几个高赞回答后,真的是感同身受,也想和大家分享一下自己大学 ...

最新文章

  1. R语言使用t.test函数计算两组独立数据的t检验(Independent t-test)
  2. 同步pod时区与node主机保持一致
  3. Linux/centos环境下maven安装与配置
  4. Typora 快捷键
  5. 项目移植,项目环境问题
  6. dataset.filter
  7. IntelliJ IDEA在行尾增加分号
  8. x·dy+y²·sinx·dx=0
  9. Android音视频三-AndroidStudio整合FFmpeg项目+FFmpeg视频解码
  10. 十大OpenGL教程
  11. 项目需求分析与建议 NABCD模型
  12. vue项目添加百度统计及设置埋点
  13. 3DsMax游戏模型制作技巧,掌握这些技术你也能接私活啦
  14. 笔记本上开启小键盘的快捷键
  15. 再见了,华为!活命要紧 ~
  16. HDU 2708 Vertical Histogram 【模拟 输出格式】
  17. 测试工程师需要掌握哪些软技能?
  18. Oracle索引(Index)创建使用
  19. Java Future详解与使用
  20. 加油卡html界面6,油卡核销.html

热门文章

  1. Swift 必备开发库 (高级篇)
  2. NSInputStream和NSMutableURLRequest-实现保存文件到服务器
  3. 文件翻译002片:Process Monitor帮助文档(Part 2)
  4. ISCW实验:配置Cisco IOS EASY ××× Server和Cisco ××× Client
  5. 如何在存储过程中得到被调用存储过程的结果集
  6. 转:读AD里特殊的属性in C#
  7. 0510JS基础:定义、输出、变量
  8. 使用WebRTC搭建前端视频聊天室——数据通道篇
  9. ui-router中使用ocLazyLoad和resolve
  10. C++编译期多态与运行期多态