尝试连接日期+随机数

时间:2015-09-08 13:56:57

标签: xml xslt

我想将一些随机数连接到日期。 通常它看起来像:

http://xsltransform.net/bdxtrc/1

结果应该是例如2015-09-08T13:53:41.514Z54321 其中54321是随机数。

我尝试使用EXSLT - RANDOM:RANDOM-SEQUENCE函数,但它无法正常工作。我不知道为什么。谁能帮助我? 谢谢, 此致

2 个答案:

答案 0 :(得分:1)

好的,我在本地使用oXygen进行了尝试,它带有内置版本的Saxon-EE。看起来该站点禁用了扩展功能,可能是出于安全原因(有些可能很危险)。这就是你收到的原因:

XTDE1425: Cannot find a matching 2-argument function named
  {http://exslt.org/random}random-sequence(). There is no Saxon extension function with the
  local name random-sequence

此错误也可以来自使用免费版本的Saxon ,最近我问Michael Kay有关它的问题,he answered (full quote)

  

一般政策是Saxon-HE支持已发布建议的基本一致性级别:对于Saxon 9.6,这意味着XPath 3.0和XQuery 3.0但不是XSLT 3.0,而不是XPath 3.1,而不是高阶函数等可选功能

     

扩展,包括Saxon扩展以及EXSLT和EXPath扩展,通常需要Saxon-PE或更高版本。

在后续行动中,他解释了你自己can use integrated extension functions创造的方式。对于在线版本(EE不起作用)以及可能对于本地版本,情况都是如此,除非您使用PE或更高版本。如果你也在本地得到这个错误,升级Saxon,或者使用另一种方法(见下)。

以下作品将返回随机序列中的第一项

random:random-sequence(10, 5987)[1]

由于您每次匹配correlationId时可能需要不同的号码,因此您可以按如下方式更改此号码:

<xsl:variable name="pos" select="position()" />
<xsl:value-of 
   select="concat(current-dateTime(), random:random-sequence(100, 5987)[$pos])" />

注意,您不需要在concat的XSLT 2.0中使用xsl:value-of,同样可以写成:

<xsl:value-of 
   select="current-dateTime(), random:random-sequence(100, 5987)[$pos]"
   separator="" />

请注意,您使用的是原始代码:

<xsl:value-of select="concat(current-dateTime(),random:random-sequence)" />

这是nodetest(即将返回节点random:random-sequence中的值)。如果调用函数,则必须使用括号,否则将不会调用该函数。在这种情况下,函数需要两个参数,您需要传递它们,并返回一系列数字。

我在此处创建了一个新的代码段:http://xsltransform.net/3NzcBue(请不要更新它,以便它可以保留此答案,如果需要,可以创建一个新的代码段。)

编辑:来自评论。

如果要求具有唯一的字符串,该字符串只需要根据当前节点而变化,并且不必全局唯一或任何东西,那么XSLT的方法是使用generate-id()函数,它在样式表的一次执行中返回一个保证唯一的字符串。如果将其添加到当前日期时间,则将具有本地唯一字符串。

XSLT 2.0,没有扩展功能:

<xsl:value-of select="concat(current-dateTime(), generate-id(.))" />

答案 1 :(得分:1)

  

我尝试使用EXSLT - RANDOM:RANDOM-SEQUENCE函数,但事实并非如此   工作正常。我不知道为什么。

最可能的原因是您的处理器不支持此功能。为了确定,我们必须知道究竟什么“无法正常工作”和/或您正在使用哪种XSLT处理器(尽管在这里和您的{{3}中被多次询问,但您拒绝告诉我们})。

但是,我不知道任何支持EXSLT random:random-sequence()功能的XSLT 1.0处理器。 OTOH,previous question由libxslt,Xalan和Saxon 6支持(仅举几例)。

如果您的神秘处理器不支持,请参阅此处的备选方案:EXSLT math:random() function

另请参阅:generate random number in RSS viewer webpart