Hello,
this is a heads-up for a pitfall (that at least I have fallen into several
times now...) with respect to XSLT 2, 9.4 "Creating implicit document nodes":
<http://www.w3.org/TR/xslt20/#temporary-trees>
With the source document:
--src.xml--
<a>
<b/>
</a>
-----------
and this transformation
--transformation.xsl--
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:template match="/">
<xsl:variable name="v1"><xsl:sequence select="a"/></xsl:variable>
<xsl:variable name="v2" select="a"/>
<xsl:text>v1: </xsl:text>
<xsl:apply-templates select="$v1/a" mode="out"/>
<xsl:text>
</xsl:text>
<xsl:text>v2: </xsl:text>
<xsl:apply-templates select="$v2/a" mode="out"/>
</xsl:template>
<xsl:template match="*" mode="out">
<xsl:value-of select="name()"/>
<xsl:apply-templates mode="#current"/>
</xsl:template>
<xsl:template match="text()" mode="#all"/>
</xsl:stylesheet>
-----------
the output is:
--output--
v1: ab
v2:
----------
I understand now why this is so per the spec, although I was puzzled at first.
However, I've spent considerable time debugging stylesheets where accessing a
tunnel variable with $var/elem sometimes yielded nothing (see v2 in my example
above) until I found that in some places, the variable was defined using
<xsl:sequence> (because some complex content construction takes place which is
either not doable or hardly readable using a single XPath expression), and
using a select attribute at other places.
Is there a technique or pattern I could employ (maybe utilizing the @as
attribute somehow?) to unify the access to variable contents where I know that
the sequences are node sequences, regardless of their content construction
using @select or <xsl:sequence>?
Thanks,
Christian
--~------------------------------------------------------------------
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>
--~--