我试图运行一个脚本来从xml字段中提取最后2个0的组合,并用10到60之间的随机数替换它们。
然而出现以下错误
XPST0017:{randomnr:rand()}中第31行的char 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()"/>
答案 0 :(得分:0)
撒克逊人有一些限制。
查看http://saxon.sourceforge.net/saxon7.9/extensions.html#saxon:script
它的内容如下:语言属性是必需的,必须取值“java”。
否则Saxon会忽略saxon:script
元素。
我可以基于调用Java方法建议另一个解决方案:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:math="java.lang.Math">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:value-of select="math:floor((math:random() * 60) + 10)"/>
</xsl:template>
</xsl:stylesheet>
我在http://xsltransform.net/上尝试过,发现它适用于 Xalan 和 Saxon 6.5.5 模式。 不幸的是,在 Saxon HE 和 Saxon EE 模式中,它失败了。
请注意, math 名称空间指向完全限定的Java类名。
答案 1 :(得分:0)
你做错了什么?您正在咨询一些非常古老的文档(可能从它实际上的内容中推断出来)。可能有一段时间撒克逊:脚本存在,但(a)很久以前,(b)它从不支持调用Javascript。