XSLT:如何声明用户定义的函数

时间:2011-12-08 07:37:57

标签: xslt functx

我有一个用于转换的XSLT样式表。在这里我必须使用<xsl:function>指定用户定义的函数。当我即将在<xsl:stylesheet></xsl:stylesheet>内执行此操作时,会抛出错误。

这是功能:

<xsl:function name="functx:pad-string-to-length" as="xs:string" 
              xmlns:functx="http://www.functx.com" >
  <xsl:param name="stringToPad" as="xs:string?"/> 
  <xsl:param name="padChar" as="xs:string"/> 
  <xsl:param name="length" as="xs:integer"/> 

  <xsl:sequence select=" 
   substring(
     string-join (
       ($stringToPad, for $i in (1 to $length) return $padChar)
       ,'')
    ,1,$length)
 "/>

</xsl:function>

2 个答案:

答案 0 :(得分:1)

问题中定义的函数在语法上是正确的,看起来很有意义。

因此,错误出现在您忘记向我们展示的代码中 - 更具体地说,该函数如何与哪些参数一起使用。

除此之外,还有明显的重构可能性 - 例如用string-join()替换不必要的concat()

答案 1 :(得分:0)

正如@John Mitchell所说,告诉我们错误是什么可能会有所帮助。但是,我看到你在函数上声明了名称空间 - 确保xmlns:functx="http://www.functx.com"也在样式表顶部的<xsl:stylesheet>元素中声明。

显然,要检查的另一件事是你在函数调用中正确输入你的参数:前两个参数需要引号但第三个参数不需要(例如<xsl:value-of select="functx:pad-string-to-length('boo', '-', 12)"/>)。