Subject: Re: [xsl] Is it possible to set the mode dynamically? From: "Ruski Blogg profrustyleafiii@xxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Wed, 8 Jan 2020 20:44:42 -0000 |
Many thanks for all the advice. Was not aware of how powerful higher order functions were in XSLT 3.0 - may have to delve deeper. Sent via iPigeon... > On 7 Jan 2020, at 14:57, Piez, Wendell A. (Fed) wendell.piez@xxxxxxxx <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote: > > o;? > Hi, > > Steering clear of higher-order functions and indeed of the question as posted, one can work around the requirement by doing something entirely different. > > For example, one could pass that file name in as a tunnel parameter and then reference it in templates lower down, without having to switch modes at the top. > > Of course, YMMV but in many cases, this approach is more parsimonious of code than multiple modes, and it beats mode overloading for maintenance programmers who are baffled by modes b but to whom a tunnel parameter might be a Neat Thing. > > Cheers, Wendell > > From: Michael Kay mike@xxxxxxxxxxxx <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> > Sent: Tuesday, January 7, 2020 6:21 AM > To: xsl-list <xsl-list@xxxxxxxxxxxxxxxxxxxxxx> > Subject: Re: [xsl] Is it possible to set the mode dynamically? > > Another way would be to associate a function with each mode: > > <xsl:function name="f:apply-pivot-table"> > <xsl:param name="select"/> > <xsl:apply-templates select="$select" mode="pivot-table"/> > </xsl:function> > > <xsl:function name="f:apply-default"> > <xsl:param name="select"/> > <xsl:apply-templates select="$select" mode="#unnamed"/> > </xsl:function> > > <xsl:variable name="apply" select="if ($table-name = 'pivot-table-payload') then f:apply-pivot-table#1 else f:apply-default#1"/> > > and then replace the <xsl:apply-templates select="X"/> instruction with <xsl:sequence select="$apply(X)"/> > > (But having introduced higher order functions, you might then find you can do everything with higher order functions and don't need template rule matching at all). > > Michael Kay > Saxonica > > > On 7 Jan 2020, at 11:01, Martin Honnen martin.honnen@xxxxxx <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote: > > Am 07.01.2020 um 11:51 schrieb rus tle profrustyleafiii@xxxxxxxxxxx: > Is it possible to set the mode dynamically? > > The use case: > > 1. Setting a variable to a file name > > <xsl:variable name="PayloadName" select="/POM/Netflix/@payload" /> > > 2. Using that variable to load the file dynamically into another variable > > <xsl:variable name="payload" select="document(concat($PayloadName, '.xml'))/payloadb/> > > 3. Calling a template and passing the file name as as a param to be used in that called template as the mode. > > <xsl:call-template name="create-html-tables"> > <xsl:with-param name="PayloadName" select="$PayloadNameb/> > </xsl:call-template> > > <xsl:template name="create-html-tables"> > <xsl:param name=bPayloadName"/> > <xsl:apply-templates select="$pom//Event" mode=b$payloadNameb/> > </xsl:template> > > Is that a possibility in anyway shape or formb&? Otherwise I am thinking the only alternative would be to use a choose and then hardcode the mode - which works, but just wondering if there was a cleaner way? > > > <xsl:choose> > <xsl:when test="$PayloadName = 'pivot-table-payload'"> > <xsl:apply-templates select="$pom//Event" mode="pivot-table"/> > </xsl:when> > <xsl:otherwise> > <xsl:apply-templates select="$pom//Event" mode="default"/> > </xsl:otherwise> > </xsl:choose> > > Many thanks, > > Rusty > > Using a shadow attribute in XSLT 3 it might work: https://www.w3.org/TR/xslt-30/#shadow-attributes > > The variable/param would need to be global and static. > > Additionally there is fn:transform to run on the fly generated XSLT. > > XSL-List info and archive > EasyUnsubscribe (by email) > > XSL-List info and archive > EasyUnsubscribe (by email) > XSL-List info and archive > EasyUnsubscribe (by email)
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Is it possible to set the, Piez, Wendell A. (Fe | Thread | Re: [xsl] Is it possible to set the, Liam R. E. Quin liam |
Re: [xsl] [ann] Upcoming XSLT 3 cou, Liam R. E. Quin liam | Date | [xsl] FWK005 error, Rick Quatro rick@xxx |
Month |