[xsl] Re: Can this be written in a shorter form?

Subject: [xsl] Re: Can this be written in a shorter form?
From: "Dimitre Novatchev" <dnovatchev@xxxxxxxxx>
Date: Wed, 7 Jan 2004 22:58:28 +0100
> > This is part of a <xls:choose> test
> >
> > <xsl:when test="$node_detlijn[$node_position]/@type = 'text' or
> > $node_detlijn[$node_position]/@type = 'style'">
> >
>
> <xsl:when test="$node_detlijn[$node_position]/@type[. = 'text' or . =
'style']" />
>
> should do the trick.

Yes.

When there are much more than two choices (or unknown number) it would be
preferrable to have them specified separately (as the text descendents of a
global-scope element in the stylesheet or in an imported stylesheet).

Then the comparison will be:

  <xsl:when test="$node_detlijn[$node_position]/@type = $choices />

where the "$choices" xsl:variable is defined in the following way:

 <xsl:variable name="choices" select="document('')/*/myChoices::*[1]/*"/>

and we have declared a specific namespace and bound the "myChoices" prefix
to it and we have the following global-scope element:

<myChoices:group1>
  <choice>text</choice>
  <choice>style</choice>
    .  .   .  .  .  .  .  .  .  .  .
  <choice>last</choice>
</myChoices:group1>

For efficiency we could put the choices in a separate tree and define a key:

<xsl:key name="kChoices" match="choice" use="."/>


Then the test (with the choices tree as the current document ) will simply
be:

  <xsl:when test="key('kChoices', $node_detlijn[$node_position]/@type)"/>


Dimitre Novatchev.
FXSL developer

http://fxsl.sourceforge.net/ -- the home of FXSL
Resume: http://fxsl.sf.net/DNovatchev/Resume/Res.html





 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread