Re: [xsl] A variable in the test attribute of <xsl:if> ?

Subject: Re: [xsl] A variable in the test attribute of <xsl:if> ?
From: David Carlisle <davidc@xxxxxxxxx>
Date: Fri, 26 Oct 2007 10:16:48 +0100
> If I could create a "must-match-this-if-clause.xsl" and feed it the
> above string, it would be more efficient.
> Any other ways to approach this problem?

one way is to generate the run time stylesheets from your dat

so if you have

<xsl:element name="xsl:if">
  <xsl:attribute name="test" select="$param"/>

then passing the global parameter "param"  into this stylesheet will
generate an instance of a stylesheet to use at run time, eg

<xsl:if test="X = 'foo' and Y = 'bar'">....

another way is to use the in built macro pre-processor built into XML,
using teh entity expansion mechanism and have

<xsl:if test="&mytest-1"/>

and start the stylesheet

<!DOCUMENT xsl:styesheet SYSTEM "mydefs.ent">

where mydefs.ent has (in this instance)

<!ENTITY mytest1 "(X='foo' and Y='bar') or (Z='baz' and (A!='bof' or 
  B='bop'))) or (starts-with(C,'quux'))">

But I'm not sure why you can't just use a function

<xsl:if test="my:testfunc(.)"

with my:test-func  being defined each time as appropriate, eg

<xsl:function name="my:testfunc" as="xs:boolean">
 <xsl:param name="here"/>
  <xsl:sequence"$here/(((X='foo' and Y='bar') or (Z='baz' and (A!='bof' or 
  B='bop'))) or (starts-with(C,'quux')))"/>


The Numerical Algorithms Group Ltd is a company registered in England
and Wales with company number 1249803. The registered office is:
Wilkinson House, Jordan Hill Road, Oxford OX2 8DR, United Kingdom.

This e-mail has been scanned for all viruses by Star. The service is
powered by MessageLabs. 

Current Thread