Hi, Raymond.
Raymond <[EMAIL PROTECTED]> wrote on 2007-08-10 12:55:19 PM:
> I'm wondering if there is anyway to achieve something like this:
>
> <xsl:variable name="category_defs">
> <xsl:for-each select="$category_defs1" >
> <xsl:copy>
> <xsl:attribute name="mode">1</xsl:attribute>
> </xsl:copy>
> </xsl:for-each>
> <xsl:for-each select="$category_defs2" >
> <xsl:copy>
> <xsl:attribute name="mode">2</xsl:attribute>
> </xsl:copy>
> </xsl:for-each>
> </xsl:variable>
>
> Essentially, what I'm trying to do is merge the two result sets into
> one interleaved set, while maintaining the distinction between the
> two by applying a "mode" attribute.
According to section 11.1 of XSLT 1.0,[1] "An operation is permitted on a
result tree fragment only if that operation would be permitted on a string
(the operation on the string may involve first converting the string to a
number or boolean)." So in standard XSLT, you can't do it. To be able to
access the nodes in a result tree fragment and directly manipulate them,
you need to use the node-set extension function. Something like the
following should work:
<xsl:variable name="category_defs"
xmlns:exslt="http://exslt.org/common">
<xsl:for-each select="exslt:node-set($category_defs1)/node()" >
<xsl:copy>
<xsl:attribute name="mode">1</xsl:attribute>
</xsl:copy>
</xsl:for-each>
<xsl:for-each select="exslt:node-set($category_defs2)/node()" >
<xsl:copy>
<xsl:attribute name="mode">2</xsl:attribute>
</xsl:copy>
</xsl:for-each>
</xsl:variable>
I hope that helps.
Thanks,
Henry
[1] http://www.w3.org/TR/xslt#section-Result-Tree-Fragments
------------------------------------------------------------------
Henry Zongaro XSLT Processors Development
IBM SWS Toronto Lab T/L 969-6044; Phone +1 905 413-6044
mailto:[EMAIL PROTECTED]