XSLT 2.0高级计算包括Cos()Sin()

时间:2016-12-19 22:43:14

标签: xslt xslt-1.0 xslt-2.0 exslt

据我所知,没有用于高级计算的XSLT功能,任何人都不知道如何在XSLT中进行数学运算,如余弦/ Sin()?该要求也非常具体,我需要扩展可下载(而不是指向一个URL),以便我可以下载它并在我的XSL脚本中作为源引用。我无法下载EXSLT源文件尝试,因为它似乎有该页面的问题。您还可以提供一个简单的示例,说明如何在脚本中引用源并计算简单的内容,如:

<input>
<num1>1</num1>
<num2>1</num2>
</input>

并输出为:

<output>
<cosOfnum1>0.54030230586</cosOfnum1>
<sinOfnum2>0.8414709848</sinOfnum2>
</output>

谢谢!

2 个答案:

答案 0 :(得分:1)

Saxon 9(包括HE,用9.6测试,另见http://saxonica.com/html/documentation9.6/functions/math/sin.html说“来自Saxon 9.6,所有版本都有。”)确实对https://www.w3.org/2005/xpath-functions/math/中定义的函数提供了开箱即用的支持,这是一个例子:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:math="http://www.w3.org/2005/xpath-functions/math"
    exclude-result-prefixes="xs math"
    version="2.0">

    <xsl:template match="input">
        <output>
            <xsl:apply-templates/>
        </output>
    </xsl:template>

    <xsl:template match="num1">
        <cosOfnum1>
            <xsl:value-of select="math:cos(.)"/>
        </cosOfnum1>
    </xsl:template>

    <xsl:template match="num2">
        <sinOfnum2>
            <xsl:value-of select="math:sin(.)"/>
        </sinOfnum2>
    </xsl:template>

</xsl:stylesheet>

我还测试了XmlPrime 4在使用命令行选项--xt30时正确运行上面的样式表,因此它还内置了对这些函数的支持。

Altova XMLSpy 2017还支持开箱即用的名称空间xmlns:math="http://www.w3.org/2005/xpath-functions/math"中的功能,但仅限于version="3.0"样式表。

答案 1 :(得分:1)

  

据我所知,没有开箱即用的XSLT功能   计算,任何人都知道如何做数学如   XSLT中的Cosine/Sin()

使用FXSL库,除了其他功能之外,还可以使用纯XSLT 1.0或XSLT 2.0编写的三角函数:

http://fxsl.sourceforge.net/articles/xslCalculator/The%20FXSL%20Calculator.html#The_Trigonometric_Functions

FXSL的数学模块实施

  1. 众所周知的三角函数:sin()cos()tan()cot()sec()csc()
  2. 双曲三角函数:hsin()hcos()htan()hcot()hsec()hcsc()
  3. 指数和对数函数:exp()ln()log10()log2()log()pow()sqrt() < / LI>
  4. 求解一个实变量的方程: Newton - Raphson 方法和二元搜索方法。
  5. 反函数:arcsin()arccos()arctan()arccot()arcsec()arccsc()archsin(),{{ 1}},archcos()archtan()archcot()archsec()