文档章节

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

北风其凉
 北风其凉
发布于 2015/02/06 14:23
字数 512
阅读 78
收藏 3
点赞 0
评论 0

继上次我写了篇文章《在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语言更为复杂的逻辑,因此涉及到比较复杂的计算时,我认为嵌入脚本辅助计算的方式更值得使用。

© 著作权归作者所有

共有 人打赏支持
北风其凉

北风其凉

粉丝 114
博文 493
码字总数 462457
作品 4
朝阳
程序员
在XSLT样式表中使用莱布尼兹级数计算π的近似值

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

北风其凉 ⋅ 2015/02/04 ⋅ 0

JS学习笔记01

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

Leo好家伙 ⋅ 2014/09/12 ⋅ 0

JavaScript学习笔记(一)——JS基础知识介绍

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

长平狐 ⋅ 2013/01/06 ⋅ 0

作为前端你不得不知-浏览器的工作原理:网络浏览器幕后揭秘

序言 这是一篇全面介绍 WebKit 和 Gecko 内部操作的入门文章,是以色列开发人员塔利·加希尔大量研究的成果。在过去的几年中,她查阅了所有公开发布的关于浏览器内部机制的数据(请参见资源)...

xllily_11 ⋅ 2017/01/14 ⋅ 0

使用XSLT统计存储在XML中的日志信息

今天研究了下VS在读取低版本项目时对其进行升级的迁移报告“UpgradeLog.XML”,这个报告是一个XML文件,但是加载了一个XSLT文件“UpgradeReport.xslt”。这个XSLT文件除了用于逻辑计算的部分...

北风其凉 ⋅ 2015/01/30 ⋅ 0

Jmeter 使用笔记之 html 报告扩展(一)

题记:在用 loadrunner 的时候可以生成一个 HTML 的报告,并且里面包含各种图表,各种详细的数据。而在使用 Jmeter 测试完后并不能直接生成 Html 的报告(无论是用 GUI 还是命令行启动)。 ...

OneAPM蓝海讯通 ⋅ 2016/03/04 ⋅ 0

How browsers work【中文版】

序言 这是一篇全面介绍 Webkit 和 Gecko 内部操作的入门文章,是以色列开发人员塔利·加希尔大量研究的成果。在过去的几年中,她查阅了所有公开发布的关于浏览器内部机制的数据(请参见资源)...

k_k_anna ⋅ 2015/02/10 ⋅ 0

前端文摘:深入解析浏览器的幕后工作原理

简介   网络浏览器很可能是使用最广的软件。在这篇入门文章中,我将会介绍它们的幕后工作原理。我们会了解到,从您在地址栏输入 直到您在浏览器屏幕上看到 Google 首页的整个过程中都发生了...

effto ⋅ 2016/09/13 ⋅ 0

浏览器的工作原理:新式网络浏览器幕后揭秘(转)

序言 这是一篇全面介绍 Webkit 和 Gecko 内部操作的入门文章,是以色列开发人员塔利·加希尔大量研究的成果。在过去的几年中,她查阅了所有公开发布的关于浏览器内部机制的数据(请参见资源)...

Jeky ⋅ 2012/12/07 ⋅ 8

HTML(超文本标记语言)之【动态网页】

HTML前面已经介绍,所以CSS和JavaScript就是我们今天的主要内容。 CSS全称是级联样式表(Cascading Style Sheets)。解决内容与表现分离的问题 样式解决了一个普遍的问题 HTML 标签原本被设计...

ayesd ⋅ 2014/07/17 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

volatile和synchronized的区别

volatile和synchronized的区别 在讲这个之前需要先了解下JMM(Java memory Model :java内存模型):并发过程中如何处理可见性、原子性、有序性的问题--建立JMM模型 详情请看:https://baike.b...

MarinJ_Shao ⋅ 33分钟前 ⋅ 0

深入分析Kubernetes Critical Pod(一)

Author: xidianwangtao@gmail.com 摘要:大家在部署Kubernetes集群AddOn组件的时候,经常会看到Annotation scheduler.alpha.kubernetes.io/critical-pod"="",以表示这是一个关键服务,那你知...

WaltonWang ⋅ 41分钟前 ⋅ 0

原子性 - synchronized关键词

原子性概念 原子性提供了程序的互斥操作,同一时刻只能有一个线程能对某块代码进行操作。 原子性的实现方式 在jdk中,原子性的实现方式主要分为: synchronized:关键词,它依赖于JVM,保证了同...

dotleo ⋅ 47分钟前 ⋅ 0

【2018.06.22学习笔记】【linux高级知识 14.4-15.3】

14.4 exportfs命令 14.5 NFS客户端问题 15.1 FTP介绍 15.2/15.3 使用vsftpd搭建ftp

lgsxp ⋅ 57分钟前 ⋅ 0

JeeSite 4.0 功能权限管理基础(Shiro)

Shiro是Apache的一个开源框架,是一个权限管理的框架,实现用户认证、用户授权等。 只要有用户参与一般都要有权限管理,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户...

ThinkGem ⋅ 昨天 ⋅ 0

python f-string 字符串格式化

主要内容 从Python 3.6开始,f-string是格式化字符串的一种很好的新方法。与其他格式化方式相比,它们不仅更易读,更简洁,不易出错,而且速度更快! 在本文的最后,您将了解如何以及为什么今...

阿豪boy ⋅ 昨天 ⋅ 0

Python实现自动登录站点

如果我们想要实现自动登录,那么我们就需要能够驱动浏览器(比如谷歌浏览器)来实现操作,ChromeDriver 刚好能够帮助我们这一点(非谷歌浏览器的驱动有所不同)。 一、确认软件版本 首先我们...

blackfoxya ⋅ 昨天 ⋅ 0

线性回归原理和实现基本认识

一:介绍 定义:线性回归在假设特证满足线性关系,根据给定的训练数据训练一个模型,并用此模型进行预测。为了了解这个定义,我们先举个简单的例子;我们假设一个线性方程 Y=2x+1, x变量为商...

wangxuwei ⋅ 昨天 ⋅ 0

容器之查看minikue的environment——minikube的环境信息

执行如下命令 mjduan@mjduandeMacBook-Pro:~/Docker % minikube docker-envexport DOCKER_TLS_VERIFY="1"export DOCKER_HOST="tcp://192.168.99.100:2376"export DOCKER_CERT_PATH="/U......

汉斯-冯-拉特 ⋅ 昨天 ⋅ 0

mysql远程连接不上

设置了root所有hosts远程登录,可是远程登录还是失败,原因可能如下: 登录本地数据库 mysql -uroot -p123456 查询用户表 mysql> select user,host,password from mysql.user; 删除密码为空的...

冰公子 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部