繼上次我寫了篇文章《在XSLT樣式表中使用萊布尼茲級數計算π的近似值》後,我發如今XSLT中使用模板的遞歸調用,有下面兩個缺點:1)易讀性差,有失靈活;2)效率低下。所以,我又想了一個新的策略實如今XSLT中的一些複雜的計算工做,這就是在XSLT中嵌入腳本,本文以VBScript爲例描述了這一過程html
現有XML文檔pi.xml以下:ui
<?xml version="1.0" encoding="utf-8"?> <?xml-stylesheet type='text/xsl' href='pi.xslt'?> <LOOP COUNT="500000" />
這回的計算次數從上次的10000(一萬)次提高到了500000(五十萬)次.net
再創建xslt文件pi.xslt,內容以下:code
<?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> π的萊布尼茨公式</title> </head> <body> <xsl:text>計算π值 迭代次數:</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,會有下面的提示信息:orm
若是點擊了按鈕「否」,則XML變爲不可讀:xml
若是點擊了「是」,則會出現下面的頁面:htm
運行後能夠發現,這段代碼中爲計算Pi值一共迭代了500,000次,計算速度反而比《在XSLT樣式表中使用萊布尼茲級數計算π的近似值》中迭代10,000次還要快得多。再加上使用VBScript能夠處理比XSLT語言更爲複雜的邏輯,所以涉及到比較複雜的計算時,我認爲嵌入腳本輔助計算的方式更值得使用。blog