[xsl] Re: Filtering with multiple templates

Subject: [xsl] Re: Filtering with multiple templates
From: "Dimitre Novatchev" <dnovatchev@xxxxxxxxx>
Date: Fri, 7 Nov 2003 06:53:21 +0100
> 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


Current Thread