文档章节

在XSLT样式表中插入VBScript脚本进行数学计算

北风其凉
 北风其凉
发布于 2015/02/06 14:23
字数 512
阅读 84
收藏 3

继上次我写了篇文章《在XSLT样式表中使用莱布尼兹级数计算π的近似值》后,我发现在XSLT中使用模板的递归调用,有下面两个缺点:1)易读性差,有失灵活;2)效率低下。因此,我又想了一个新的策略实现在XSLT中的一些复杂的计算工作,这就是在XSLT中嵌入脚本,本文以VBScript为例描述了这一过程

现有XML文档pi.xml如下:

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type='text/xsl' href='pi.xslt'?>
<LOOP COUNT="500000" />

这回的计算次数从上次的10000(一万)次提升到了500000(五十万)次

再建立xslt文件pi.xslt,内容如下:

<?xml version="1.0" encoding="gb2312"?>
<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:msxml="urn:schemas-microsoft-com:xslt"
  xmlns:MyVBScript="#MyVBScript">

  <msxml:script language="VBScript" implements-prefix="MyVBScript">
    <![CDATA[
      
Function Pi(IterTimes)

    Dim Result : Result = 0.0
    Dim Sign : Sign = 1.0
    
    For i = 1 To IterTimes
        Result = Result + Sign / (i * 2 - 1)
        Sign = Sign * (-1)
    Next
    
    Pi = Result 
    
End Function
          
    ]]>
  </msxml:script>

  <xsl:output method="html" />

  <!--计算Pi值-->
  <xsl:template match="/">
    <html>

      <head>
        <meta content="zh-cn" http-equiv="Content-Language"/>
        <meta content="text/html; charset=utf-16" http-equiv="Content-Type"/>
        <title> &#960;的莱布尼茨公式</title>

      </head>
      <body>
        <xsl:text>计算&#960;值 迭代次数:</xsl:text>
        <xsl:value-of select="/LOOP/@COUNT"/>
        <hr/>
        <xsl:text>计算结果为:</xsl:text>
        <xsl:value-of select="MyVBScript:Pi(string(/LOOP/@COUNT)) * 4"/>
      </body>
    </html>
  </xsl:template>

</xsl:stylesheet>

再用IE7打开pi.xml,会有下面的提示信息:

如果点击了按钮“否”,则XML变为不可读:

如果点击了“是”,则会出现下面的页面:

运行后可以发现,这段代码中为计算Pi值一共迭代了500,000次,计算速度反而比《在XSLT样式表中使用莱布尼兹级数计算π的近似值》中迭代10,000次还要快得多。再加上使用VBScript可以处理比XSLT语言更为复杂的逻辑,因此涉及到比较复杂的计算时,我认为嵌入脚本辅助计算的方式更值得使用。

© 著作权归作者所有

共有 人打赏支持
北风其凉

北风其凉

粉丝 115
博文 498
码字总数 463468
作品 4
朝阳
程序员
私信 提问
在XSLT样式表中使用莱布尼兹级数计算π的近似值

初学XSLT的时候一直纠结它对循环的处理,一开始使用for-each进行简单的遍历操作,但是对更精确的循环控制总感觉力不从心。后来我在《XSLT从入门到精通》这本书中看到了一个概念“Side-Effect...

北风其凉
2015/02/04
0
0
MathML 介绍

MathML 是一个 W3C 推荐标准,旨在为标记数学表达式定义一个 XML 词汇表。版本 1 作为一个 W3C 推荐标准发布于 1998 年,就在 XML 规范发布后不久。MathML 已作为推荐标准发布的另外三个版本...

红薯
2010/01/23
1K
2
JavaScript学习笔记(一)——JS基础知识介绍

术语解释 Javascript是一种由Netscape的LiveScript发展而来的原型化继承的面向对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如Perl,遗留的速度问题,为...

长平狐
2013/01/06
113
0
umbraco入门(一)——认识以及安装umbraco(图解)

  Umbraco是一个开源的CMS内容管理系统,基于.NET,页面友好,操作简单,功能强大。   作为一个Umbraco新手,当然是要先去下载一个安装包,安装在自己的计算机上,其实所谓的安装,就是将...

bowenhuang
2012/12/11
0
0
45 个非常有用的 Oracle 查询语句

这里我们介绍的是 40+ 个非常有用的 Oracle 查询语句,主要涵盖了日期操作,获取服务器信息,获取执行状态,计算数据库大小等等方面的查询。这些是所有 Oracle 开发者都必备的技能,所以快快...

小小编辑
2014/01/22
74K
93

没有更多内容

加载失败,请刷新页面

加载更多

js垃圾回收机制和引起内存泄漏的操作

JS的垃圾回收机制了解吗? Js具有自动垃圾回收机制。垃圾收集器会按照固定的时间间隔周期性的执行。 JS中最常见的垃圾回收方式是标记清除。 工作原理:是当变量进入环境时,将这个变量标记为“...

Jack088
19分钟前
1
0
大数据教程(10.1)倒排索引建立

前面博主介绍了sql中join功能的大数据实现,本节将继续为小伙伴们分享倒排索引的建立。 一、需求 在很多项目中,我们需要对我们的文档建立索引(如:论坛帖子);我们需要记录某个词在各个文...

em_aaron
35分钟前
2
0
"errcode": 41001, "errmsg": "access_token missing hint: [w.ILza05728877!]"

Postman获取微信小程序码的时候报错, errcode: 41001, errmsg: access_token missing hint 查看小程序开发api指南,原来access_token是直接当作parameter的(写在url之后),scene参数一定要...

两广总督bogang
35分钟前
6
0
MYSQL索引

索引的作用 索引类似书籍目录,查找数据,先查找目录,定位页码 性能影响 索引能大大减少查询数据时需要扫描的数据量,提高查询速度, 避免排序和使用临时表 将随机I/O变顺序I/O 降低写速度,占用磁...

关元
54分钟前
7
0
撬动世界的支点——《引爆点》读书笔记2900字优秀范文

撬动世界的支点——《引爆点》读书笔记2900字优秀范文: 作者:挽弓如月。因为加入火种协会的读书活动,最近我连续阅读了两本论述流行的大作,格拉德威尔的《引爆点》和乔纳伯杰的《疯传》。...

原创小博客
今天
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部