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: JBryant@xxxxxxxxx
Date: Fri, 18 Mar 2005 10:05:50 -0600
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