【问题标题】:XPST0017 Xpath syntax errorXPST0017 Xpath 语法错误
【发布时间】: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()"/>

【问题讨论】:

标签: xslt saxon


【解决方案1】:

关于撒克逊语有一些限制。

看看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/ 上尝试过,发现它可以在XalanSaxon 6.5.5 模式下工作。 不幸的是,在 Saxon HESaxon EE 模式下它失败了。

请注意,math 命名空间指向完全限定的 Java 类名。

【讨论】:

    【解决方案2】:

    你做错了什么?您正在查阅一些非常古老的文档(并且可能从它的实际内容推断)。 saxon:script 可能曾经存在过,但是 (a) 那是很久以前的事了,而且 (b) 它从不支持调用 Javascript。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-21
      • 2014-08-07
      相关资源
      最近更新 更多