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

XSLT 2.0 Advanced calculation includes Cos() Sin()

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

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

输出为:

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

谢谢!

Saxon 9(包括 HE,使用 9.6 测试,另见 http://saxonica.com/html/documentation9.6/functions/math/sin.html saying "From Saxon 9.6, available in all editions.") does have out of the box support for the functions defined in 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" 样式表中。

As I know there's no out of box XSLT function for advanced calculation, anyone have any idea how I can do math such as Cosine/Sin() within XSLT?

使用 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()
  4. 求解单实变量方程:Newton - Raphson's 方法和 Binary Search 方法。
  5. 反函数:arcsin()arccos()arctan()arccot()arcsec()arccsc()archsin()archcos()archtan()archcot()archsec()archcsc()