XSLT: как объявить пользовательскую функцию

У меня есть таблица стилей 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 ответа

Функция, определенная в вопросе, является синтаксически правильной и имеет смысл.

Следовательно, ошибка в коде, который вы забыли показать нам - более конкретно, как эта функция используется с какими аргументами.

Помимо этого, есть очевидные возможности рефакторинга, такие как замена ненужных string-join() с concat(),

Как сказал @Джон Митчелл, объяснение ошибки может быть полезным. Тем не менее, я вижу, у вас есть пространство имен, объявленное в функции - убедитесь, что xmlns:functx="http://www.functx.com" также объявлено в <xsl:stylesheet> элемент в верхней части таблицы стилей.

Очевидно, что еще одна вещь, которую нужно проверить, заключается в том, что вы правильно вводите свои аргументы в вызове функции: ваши первые два параметра будут нуждаться в кавычках, а третий - нет (например, <xsl:value-of select="functx:pad-string-to-length('boo', '-', 12)"/>).

Другие вопросы по тегам