在 XSLT 1.0 中的变量中使用 max
我可以在 XSLT 1 的变量中使用 max 函数吗? 我需要在某些节点内找到最大值,并且需要从更多地方调用它。 所以我尝试创建一个模板:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:essox="urn:essox-scripts">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template name="Field001_max_dluznych_splatek">
<xsl:param name="CrRep"/>
<xsl:variable name="PocetDluznychSplatekSplatky">
<xsl:value-of
select="max($CrRep
/Response
/ContractData
/Installments
/InstDetail
/NrOfDueInstalments)" />
</xsl:variable>
<xsl:variable name="PocetDluznychSplatekKarty">
<xsl:value-of
select="max($CrRep
/Response
/ContractData
/Cards
/CardDetail
/NrOfDueInstalments)" />
</xsl:variable>
<xsl:choose>
<xsl:when test="$PocetDluznychSplatekSplatky
>= $PocetDluznychSplatekKarty">
<xsl:value-of select="$PocetDluznychSplatekSplatky"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$PocetDluznychSplatekKarty"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
在 XML Spy 中我收到此错误:
XPath 表达式中的错误未知 功能 - 名称和数量 参数与任何函数都不匹配 静态上下文中的签名 - '最大'。
出了什么问题? 多谢, 彼得
can I use max function in a variable in XSLT 1?
I need to find a maximum value inside some nodes and I'll need to call this from more places.
So I tried to create a template:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:essox="urn:essox-scripts">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template name="Field001_max_dluznych_splatek">
<xsl:param name="CrRep"/>
<xsl:variable name="PocetDluznychSplatekSplatky">
<xsl:value-of
select="max($CrRep
/Response
/ContractData
/Installments
/InstDetail
/NrOfDueInstalments)" />
</xsl:variable>
<xsl:variable name="PocetDluznychSplatekKarty">
<xsl:value-of
select="max($CrRep
/Response
/ContractData
/Cards
/CardDetail
/NrOfDueInstalments)" />
</xsl:variable>
<xsl:choose>
<xsl:when test="$PocetDluznychSplatekSplatky
>= $PocetDluznychSplatekKarty">
<xsl:value-of select="$PocetDluznychSplatekSplatky"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$PocetDluznychSplatekKarty"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
In XML Spy I get this error:
Error in XPath expression Unknown
function - Name and number of
arguments do not match any function
signature in the static context -
'max'.
What is wrong?
Thanks a lot,
Peter
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
使用众所周知的最大惯用语:
注意:在命名模板中以便重用。
Use the well known maximum idiom:
Note: In a named template for reuse.
XSLT 1.0 中没有
max
函数。您可以通过按降序对元素进行排序然后获取第一个元素的值来解决此问题。这是另一种(较慢)的方法:
示例源文档:
输出:
每个变量的
select
中的 XPath 如下所示:或者,选择没有
的
具有更大值(即最大值)的同级。val
元素>val(显然,您需要调整 XPath 以适合您的源文档。)
注意:
sort
解决方案的性能要好得多(假设n*log( n)
排序实现)。第二种方法需要将每个val
与其每一个同级进行比较,因此是二次的。There is no
max
function in XSLT 1.0. You can work around this by sorting your elements in descending order and then taking the value of the first one.Here's another (slower) way to do it:
Sample source document:
Output:
The XPath in each variable's
select
looks like this:Or, select the
val
element having noval
siblings with a greater value (i.e. the max).(Obviously, you'll need to adjust the XPath to fit your source document.)
Note: The
sort
solution performs much better (assuming ann*log(n)
sort implementation). The second approach needs to compare eachval
to every one of its siblings and is therefore quadratic.