【发布时间】:2017-01-18 12:44:59
【问题描述】:
我正在尝试运行脚本以从 xml 字段中提取最后 2 个 0 的组合,并将它们替换为 10 到 60 之间的随机数。
但是出现以下错误
XPST0017:{randomnr:rand()} 中第 31 行的字符 15 处的 XPath 语法错误:
找不到名为 {uri:nonexistant}rand() 的匹配 0 参数函数
我做错了什么?我知道除了 javascript 调用之外的一切都有效
<xsl:stylesheet version="2.0" xmlns:randomnr="uri:nonexistant" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:package="info:srw/extension/13/package-v1.0" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:saxon="uri:http://saxon.sf.net/">
<xsl:output omit-xml-declaration="yes" indent="yes" />
<saxon:script language="JavaScript" implements-prefix="randomnr">
<![CDATA[
function rand()
{
return"" + Math.floor((Math.random() * 60) + 10);
}
]]>
</saxon:script>
<xsl:variable name="basename">
<xsl:call-template name="substring-before-last">
<xsl:with-param name="string1" select="$filename" />
<xsl:with-param name="string2" select="'00'" />
</xsl:call-template>
</xsl:variable>
<xsl:value-of select="$basename" />
<xsl:value-of select="randomnr:rand()"/>
【问题讨论】:
-
我不知道
saxon:script元素,而且撒克逊扩展命名空间与您使用的命名空间不同。我认为 Saxon 9 根本不支持调用 Javascript。如果您想要一个随机数,您可以调用 Java(如果支持)或使用 XPath 3.1 功能(如果支持)。 -
定义的扩展元素见saxonica.com/html/documentation/extensions/instructions,没有
saxon:script元素。 -
显然我当时正在查看旧版本的 saxon 文档,其中包含顶级元素 saxon:script。
-
在 Saxon 9.7 的商业版本中有 saxonica.com/html/documentation/functions/exslt-random/… 和 saxonica.com/html/documentation/functions/fn/… 支持。
-
考虑告诉我们您使用的是哪个撒克逊版本,否则试图提供帮助是毫无意义的。