xsl-list
[Top] [All Lists]

Re: [xsl] First steps with high order functions

2018-06-19 06:14:22
Thanks a lot, Martin, it's now perfectly clear !

Best regards,
Christophe


Le 19/06/2018 à 12:48, Martin Honnen martin(_dot_)honnen(_at_)gmx(_dot_)de a 
écrit :
On 19.06.2018 12:33, Christophe Marchand cmarchand(_at_)oxiane(_dot_)com wrote:

I'm trying to learn high order functions, and I have some difficulties. If someone could help...


I have a normal function :

   <xsl:function name="nu:camelCase" as="xs:string?">
     <xsl:param name="s" as="xs:string?"/>
     ...
   </xsl:function>


I want to apply it on each word of a sentence :

   <xsl:function name="nu:clearUsername" as="xs:string?">
     <xsl:param name="name" as="xs:string?"/>
     <xsl:choose>
       <xsl:when test="empty($name)"><xsl:sequence select="()"/></xsl:when>
       <xsl:when test="contains($name, ' ')">
         <xsl:variable name="temp" select="tokenize($name, ' ')"/>
         <xsl:sequence select="string-join(for-each($temp, nu:camelCase#1), ' ')"/>
       </xsl:when>
       <xsl:otherwise>
         <xsl:sequence select="$name"/>
       </xsl:otherwise>
     </xsl:choose>
   </xsl:function>

Does the for-each is correct ?

I think it should work as long as the higher-order function feature is supported.

Is there another syntax to make this work with Saxon-HE ?

Saxon 9.8 HE doesn't support the higher-order function feature so using the "for-each" function with it is not possible.

https://www.w3.org/TR/xpath-functions/#func-for-each however explains

  for-each($SEQ, $F) is equivalent to the expression for $i in $SEQ return $F($i), assuming that ordering mode is ordered.

so you can use
  for $i in $temp return nu:camelCase($i)

to avoid the use of the "for-each" function.

Is there a better way to do this ?

If you learn XPath 3.1 you could also try to get accustomed to be arrow operator and use

  $name => tokenize(' ') => for-each(nu:camelCase#1) => string-join(' ')

in the long run that might be more readable then the nesting of function calls.


--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--

<Prev in Thread] Current Thread [Next in Thread>