Subject: Re: [xsl] Is it possible to set the mode dynamically? From: "Michael Kay mike@xxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Tue, 7 Jan 2020 11:20:40 -0000 |
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 <mailto: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 <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 <http://www.mulberrytech.com/xsl/xsl-list> > EasyUnsubscribe <http://lists.mulberrytech.com/unsub/xsl-list/293509> (by email <>)
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Is it possible to set the, Martin Honnen martin | Thread | Re: [xsl] Is it possible to set the, Piez, Wendell A. (Fe |
Re: [xsl] Is it possible to set the, Martin Honnen martin | Date | Re: [xsl] Is it possible to set the, Piez, Wendell A. (Fe |
Month |