Re: [xsl] Can i use apply-templates to match a xsl:template eleme nt?

Subject: Re: [xsl] Can i use apply-templates to match a xsl:template eleme nt?
From: Chris <phatfish@xxxxxxxxx>
Date: Fri, 18 Mar 2005 16:28:10 +0000
I did try doing "dynamic" includes first, ie. including other
stylesheets through a base layout  -- rather than adding a base layout
to the other stylesheets.

It seemed however from previous comments here, that including a base
or common stylesheet (layout.xsl) into the others to create a layout
was the best way to do it.

Im just a bit stuck on how to apply the templates defined in the
individual stylesheets -- like the "releases" one with the loop above
-- to the common layout. I assume i can be done :)

On Fri, 18 Mar 2005 10:05:50 -0600, JBryant@xxxxxxxxx <JBryant@xxxxxxxxx> wrote:
> Would  xsl:include do the trick?
> 
> You can write a stylesheet that includes both of the stylesheets you
> reference here and build a document with the ordering you want. You might
> even be able to read the files to include from the elements of the
> document. So far, I've only needed to do static includes, so I can't say
> for sure. You should be able to specify which stylesheets to use via
> parameters, too.
> 
> Just a thought.
> 
> Jay Bryant
> Bryant Communication Services
> (presently consulting at Synergistic Solution Technologies)
> 
> Chris <phatfish@xxxxxxxxx>
> 03/18/2005 09:52 AM
> Please respond to
> xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> 
> To
> xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> cc
> 
> Subject
> Re: [xsl] Can i use apply-templates to match a xsl:template eleme nt?
> 
> Thats the xml data, its a work in progress, so dont be too harsh on it
> :) Its generated and transformed in PHP5 to output HTML.
> 
> releases is the data for the loop, releasepage is whats being matched
> by my xsl:template element at the moment.
> 
> <?xml version="1.0"?>
> <page>
>   <header stylesheet="header.xsl"/>
>   <body stylesheet="releases.xsl">
>     <releasepage>
>       <releases>
>         <row iteration="0">
>           <date>2005-01-01</date>
>           <name>Release Name 1</name>
>         </row>
>         <row iteration="1">
>           <date>2005-01-02</date>
>           <name>Release Name 2</name>
>         </row>
>         <row iteration="2">
>           <date>2005-01-03</date>
>           <name>Release Name 3</name>
>         </row>
>         <row iteration="3">
>           <date>2005-01-04</date>
>           <name>Release Name 4</name>
>         </row>
>         <row iteration="4">
>           <date>2005-01-05</date>
>           <name>Release Name 5</name>
>         </row>
>         <row iteration="5">
>           <date>2005-01-06</date>
>           <name>Release Name 6</name>
>         </row>
>       </releases>
>     </releasepage>
>   </body>
>   <footer stylesheet="footer.xsl"/>
> </page>
> 
> Thanks for the comment btw Jay, i didnt notice another reply untill i
> had sent the mail before :)
> 
> On Fri, 18 Mar 2005 10:29:24 -0500, Maria Amuchastegui
> <mamuchastegui@xxxxxxxxxxx> wrote:
> > Can you post the XML data?
> >
> > Maria
> >
> > -----Original Message-----
> > From: Chris [mailto:phatfish@xxxxxxxxx]
> > Sent: Friday, March 18, 2005 10:19 AM
> > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> > Subject: Re: [xsl] Can i use apply-templates to match a xsl:template
> eleme
> > nt?
> >
> > Hi thanks, i did look at call-template before in my testing but
> discarded it
> > because it didnt output my foreach loop in the template that i was
> calling.
> >
> > But it does seem thats what i should be using, although im not sure why
> the
> > loop isnt being outputted -- and reading the specifications didnt really
> > make it any clearer :)
> >
> > Bellow was the "main" template that i was hoping to output, it just
> contains
> > a test for-each loop.
> > Is it possible to have the template im calling output its content as i
> > wanted?
> >
> > <?xml version="1.0" encoding="UTF-8"?>
> > <xsl:transform version="1.0"
> > xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
> > <xsl:output method="html"/>
> >
> > <xsl:include href="layout.xsl"/>
> > <xsl:include href="header.xsl"/>
> >
> > <xsl:template match="releasepage" name="main" >
> >         <div>A table for the main template</div>
> >         <table>
> >           <tbody>
> >             <xsl:for-each select="releases/row">
> >               <tr>
> >                 <xsl:for-each select="date">
> >                   <td>
> >                     <xsl:apply-templates/>
> >                   </td>
> >                 </xsl:for-each>
> >                 <xsl:for-each select="name">
> >                   <td>
> >                     <xsl:apply-templates/>
> >                   </td>
> >                 </xsl:for-each>
> >               </tr>
> >             </xsl:for-each>
> >           </tbody>
> >         </table>
> > </xsl:template>
> >
> > </xsl:transform>
> >
> > On Fri, 18 Mar 2005 08:45:45 -0500, Maria Amuchastegui
> > <mamuchastegui@xxxxxxxxxxx> wrote:
> > > You could do that with a named template:
> > >
> > > <?xml version="1.0" encoding="UTF-8"?> <xsl:transform version="1.0"
> > > xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
> > >         <xsl:output method="html"/>
> > >         <xsl:template match="page">
> > >                 <html>
> > >                         <head>
> > >
> > >                 </head>
> > >                         <body>
> > >                                 <div id="header">
> > >                                         <xsl:call-template
> name="header"/>
> > >                                 </div>
> > >                                 <div id="main">
> > >                                         <xsl:call-template
> name="main"/>
> > >                                 </div>
> > >                         </body>
> > >                 </html>
> > >         </xsl:template>
> > >
> > >         <xsl:template name="header">
> > >                 <!-- do stuff here -->
> > >         </xsl:template>
> > >
> > >         <xsl:template name="main">
> > >                 <!-- do stuff here -->
> > >         </xsl:template>
> > >
> > > </xsl:transform>
> > >
> > >
> > > -----Original Message-----
> > > From: Chris [mailto:phatfish@xxxxxxxxx]
> > > Sent: Friday, March 18, 2005 8:39 AM
> > > To: XSL List
> > > Subject: [xsl] Can i use apply-templates to match a xsl:template
> element?
> > >
> > > I would like the output of a xsl:template element to appear in a
> > > specific location in stylesheet. Can i use apply-templates to match
> > > the template i want and have it output there?
> > >
> > > eg:
> > > <?xml version="1.0" encoding="UTF-8"?> <xsl:transform version="1.0"
> > > xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
> > > <xsl:output method="html"/>
> > >
> > > <xsl:template match="page">
> > >         <html>
> > >                 <head>
> > >
> > >                 </head>
> > >                 <body>
> > >                         <div id="header"><xsl:apply-templates
> > > select="header"/></div>
> > >                         <div id="main"><xsl:apply-templates
> > > select="main"/></div>
> > >                 </body>
> > >         </html>
> > > </xsl:template>
> > >
> > > </xsl:transform>
> > >
> > > This file will be included into my stylesheets and used as a base
> > > layout. I would like the xsl:template with name="main" to output into
> > > the location above. But im not sure if this is allowed, does select
> > > only relate an element in the source xml document?
> > >
> > > I hope you can see what im trying to do, Thanks :)

Current Thread