我对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] > updated)]/updated"/>
</xsl:template>
但输出是:
max-updated:2013-05-19T16:18:59Z
似乎总是检索第一个节点。
我知道我可以先排序,然后获得第一个(或最后一个)位置元素,但我更想知道我做错了什么。
答案 0 :(得分:0)
XSLT 1.0不提供大于或小于字符串的比较:它将两个字符串转换为数字(给出NaN),并且将NaN与NaN进行比较总是给出错误。
在XSLT 1.0中比较字符串的唯一方法是xsl:sort - 对元素进行排序并选择第一个/最后一个。
或转到XSLT 2.0。