为什么这个XSLT max模拟函数不起作用

时间:2013-05-21 20:21:49

标签: xml xslt-1.0 max

我对xslt并不多,所以我遵循一些众所周知的模式来模拟xslt 1.0的最大函数。

修改 我知道线程主题可能令人困惑,我不是试图构建一个函数,而是模拟相同的行为

也就是说,我有以下xml:

<cards>
<card><updated>2013-05-19T16:18:59Z</updated></card>
<card><updated>2013-05-19T20:41:59Z</updated></card>
<card><updated>2013-05-19T18:30:59Z</updated></card>
</cards>

我想得到以下输出:

max-updated:2013-05-19T20:41:59Z

这是xslt,但它没有按预期工作:

<xsl:template match="cards">
   max-updated:<xsl:value-of select="card[not(../card[updated] &gt; updated)]/updated"/>
</xsl:template>

但输出是:

max-updated:2013-05-19T16:18:59Z

似乎总是检索第一个节点。

我知道我可以先排序,然后获得第一个(或最后一个)位置元素,但我更想知道我做错了什么。

1 个答案:

答案 0 :(得分:0)

XSLT 1.0不提供大于或小于字符串的比较:它将两个字符串转换为数字(给出NaN),并且将NaN与NaN进行比较总是给出错误。

在XSLT 1.0中比较字符串的唯一方法是xsl:sort - 对元素进行排序并选择第一个/最后一个。

或转到XSLT 2.0。