[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: First steps with high order functions

Subject: Re: First steps with high order functions
From: "Christophe Marchand cmarchand@xxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Tue, 19 Jun 2018 11:14:17 -0000
Re:  First steps with high order functions
Thanks a lot, Martin, it's now perfectly clear !

Best regards,
Christophe


Le 19/06/2018 C 12:48, Martin Honnen martin.honnen@xxxxxx a C)critB :
On 19.06.2018 12:33, Christophe Marchand cmarchand@xxxxxxxxxx wrote:

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


I have a normal function :


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


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


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

B 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
B  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


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

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

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.