XSLT: как объявить пользовательскую функцию - PullRequest
0 голосов
/ 08 декабря 2011

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

1 голос
/ 08 декабря 2011

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

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

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

0 голосов
/ 08 декабря 2011

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

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

...