AW: [xsl] for-each with included variable

Subject: AW: [xsl] for-each with included variable
From: "Machelett, Renato (FA.G+M-EP/ETK)" <fa-gm-renato.machelett@xxxxxxxxxxxxxxxxxxx>
Date: Thu, 19 Apr 2001 15:26:18 +0200
Thank you David and Mike, 

David's solution didn't bring the result I expected, I'm not sure why, but
the output stays exactly the same as before. Which I find unsettling - like
always when I'm clueless.

Mike's approach won't work because I cannot use key() inside a template.
I'll try the generate-id() part once I've gotten more familiar with this
whole thing, which might take a while as far as I can tell. I'm still
struggling with the basics. :)

For now I picked another solution (found it in the FAQ, which is a good
one), that might not be overly elegant, but works. The variable now holds
the entire expression, not just a list of single literals.


<xsl:variable name="myOPTypeList" select="(.//*[@OPTypeRef='Type1'])[1] |
(.//*[@OPTypeRef='Type2'])[1] | (.//*[@OPTypeRef='Type3'])[1]"/>


<xsl:include href="IncludeMe.xsl"/>
<xsl:for-each select="$myOPTypeList">
  <!-- do some stuff -->

Not exactly the way I wanted it, but at least I have a central place for
changes, and I have it when I need it - NOW. :)


> > <xsl:for-each select="(.//*[@OPTypeRef='Type1'])[1] |
> > (.//*[@OPTypeRef='Type2'])[1] | (.//*[@OPTypeRef='Type3'])[1]">
> >   <!-- do some stuff -->
> > </xsl:for-each>
> >
> Someone else has pointed out your simple coding error, but how about a
> completely different approach:
> <xsl:key name="OKtypes"
>          match="*[@OPTypeRef[.='Type1' or .='Type2' or .='Type3']]"
>          use="1"/>
> <xsl:for-each select="key('OKtypes', 1)[1]"> ...
> (This only works if ".//*" in your code is searching the 
> whole document: if
> not, you could change the use= in the key to be the 
> generate-id() of the
> relevant ancestor node.)
> Mike Kay
> Software AG

 XSL-List info and archive:

Current Thread