We need to allow multiple templates to select some of
members. for example,
the first template will get:
<Member name="x">
<Member name="z"/>
</Member>
the second template will get:
<Member name="x">
<Member name="w"/>
</Member>
If we run this two templates sequentially, we will
get:
<Member name="x">
<Member name="z"/>
</Member>
<Member name="x">
<Member name="w"/>
</Member>
But we want to get the following based on the original
structure:
<Member name="x">
<Member name="z"/>
<Member name="w"/>
</Member>
Please provide any idea that might help. Thanks a lot.
The output of applying two templates can be merged like this:
This transformation:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ext="http://exslt.org/common"
exclude-result-prefixes="ext">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/">
<xsl:variable name="vrtfOut">
<xsl:call-template name="t1"/>
<xsl:call-template name="t2"/>
</xsl:variable>
<xsl:variable name="vOut" select="ext:node-set($vrtfOut)/*"/>
<xsl:for-each select="$vOut[1]">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:copy-of select="../*/*"/>
</xsl:copy>
</xsl:for-each>
</xsl:template>
<xsl:template name="t1">
<Member name="x">
<Member name="z"/>
</Member>
</xsl:template>
<xsl:template name="t2">
<Member name="x">
<Member name="w"/>
</Member>
</xsl:template>
</xsl:stylesheet>
when applied on any source.xml (not used), produces:
<Member name="x">
<Member name="z"/>
<Member name="w"/>
</Member>
=====
Cheers,
Dimitre Novatchev.
http://fxsl.sourceforge.net/ -- the home of FXSL
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list