码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-02-06 15:18:13      阅读:181      评论: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语言更为复杂的逻辑,因此涉及到比较复杂的计算时,我认为嵌入脚本辅助计算的方式更值得使用。

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

标签:

原文地址:http://my.oschina.net/Tsybius2014/blog/376094

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!