xsl-list
[Top] [All Lists]

Re: [xsl] Nicer way to change context-node than xsl:for-each ?

2009-12-05 02:39:21
2009/12/4 Frédéric Schwebel <Fred(_dot_)Schwebel(_at_)ouvaton(_dot_)org>:
<xsl:template match="foo">
 <!-- do things with root -->
 <xsl:for-each select="*[1]">
   <xsl:value-of select="." />
   <!-- do many other things, call templates... -->
 </xsl:for-each>
</xsl:template>

Usually xsl:for-each is used to process a serie of nodes, not only to
change the context.

It seems to me, xsl:for-each won't be required in this case. You only
want to process "one" element (*[1] implies that!).

Therefore, I could have written the stylesheet logic as follows:

<xsl:template match="foo">
 <xsl:variable name="x" select="*[1]" />
 <xsl:value-of select="$x" />
 <!-- can do other things, on "x" -->
</xsl:template>

If you are working in a 2.0 environment, there are also possibilities
for stronger compile time type checking, for example as below:

<xsl:variable name="x" select="*[1]" as="element()" />

It also seems, that *[1] will always imply an element, so
as="element()" may not be necessary, if you don't care if this element
should exist or not.

But certainly it's a good idea to specify data types of variables etc,
if we know before compilation (and most of the time, we do!), what the
data types should be.


-- 
Regards,
Mukul Gandhi

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--