[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

Re: [xsl] Re: "if-condition-return something" idiom : is it possible in XSLT 1 ?


Subject: Re: [xsl] Re: "if-condition-return something" idiom : is it possible in XSLT 1 ?
From: "Ihe Onwuka ihe.onwuka@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Mon, 16 Jun 2014 12:43:42 -0000

XSLT is a pattern matching language, so the short answer is that idiomatic
XSLT would use predicates in template rules for this

<xsl:template match="balance[. > 100]">
  things to do if balance is greater than 100
</xsl:template>

<xsl:template match="balance">
  default processing for balance
</xsl:template>

which might look verbose but if you code like this the processor will
figure out when to fire which rule  and what to do next.

This will probably not satisfy you as you seem to want to replicate C++
programming idioms in XSLT. Yes you can do it but there lies a verbose and
ugly terrain for which  I do not have the energy to travel but maybe
someone else does.





On Mon, Jun 16, 2014 at 1:19 PM, Kerry, Richard richard.kerry@xxxxxxxx <
xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:

> And just to be clear, I am asking about XSLT1.
> (I am doing DocBook transformations and am trying to parse dates as
> strings)
>
> ________________________________________
>
> In C/C++ programming the following idiom is quite common:
>
> if (condition1)
>   return value1;
>
> if (condition2)
>   return value2;
>
> if (condition3)
>   return value3;
>
> return value4;
>
> In other words each of these will test a condition and if it is satisfied
> execution will stop and some value will be returned to the caller.  The run
> stops with the first condition that succeeds.
>
> I've tried to do something similar in XSLT and am getting somewhat
> contradictory indications of whether or not it is working.  Please can
> someone advise whether this should work, or if there is a similar form that
> I can use.
>
> What I have is like the following template, to be called by name.
>
> <xsl:template name="test.1">
>   <xsl:param name="string" select="''"/>
>
>    <xsl:if test="$check.1 = 0">
>      <xsl:value-of select="$value.1" />
>    </xsl:if>
>
>    <xsl:if test="$check.2 = 0">
>      <xsl:value-of select="$value.2" />
>    </xsl:if>
>
>    <xsl:if test="$check.3 = 0">
>      <xsl:value-of select="$value.3" />
>    </xsl:if>
>
>   <xsl:value-of select="$value.4" />
> </xsl:template>
>
> My theory of why it might work is based on knowing that the following will
> work:
>
> <xsl:template name="test.2">
>   <xsl:param name="string" select="''"/>
>
>   <xsl:value-of select="$value.4" />
> </xsl:template>
>
> I say "will work" in the sense that if the above template is called (by
> name) it will return the value from value.4.  What I'm not sure of is
> whether that should work if the "returning" value-of is a level down, in an
> xsl:if, as in the other template (test.1).
> It is only a theory of why it might work.  Practice may indicate
> otherwise, and somewhere in the spec might be a reason.
>
> Can someone please advise whether I can do this, or how to get broadly
> equivalent behaviour ?
>
> Regards,
> Richard.
>
>
>
> Richard Kerry
> BNCS Engineer, SI SOL Telco & Media Vertical Practice
> T: +44 (0)20 3618 2669
> M: +44 (0)7812 325518
> G300, Stadium House, Wood Lane, London, W12 7TA
> richard.kerry@xxxxxxxx
>
>
> This e-mail and the documents attached are confidential and intended
> solely for the addressee; it may also be privileged. If you receive this
> e-mail in error, please notify the sender immediately and destroy it. As
> its integrity cannot be secured on the Internet, the Atos group liability
> cannot be triggered for the message content. Although the sender endeavours
> to maintain a computer virus-free network, the sender does not warrant that
> this transmission is virus-free and will not be liable for any damages
> resulting from any virus transmitted.


Current Thread
Keywords