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: Maria Amuchastegui <mamuchastegui@xxxxxxxxxxx>
Date: Fri, 18 Mar 2005 11:43:41 -0500
Is this what you had in mind?

<?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="/">
		<html>
			<head>
				<title/>
			</head>
			<body>
				<div>A table for the main template</div>
				<table>
					<tbody>
						<xsl:apply-templates
select="//row"/>
					</tbody>
				</table>
			</body>
		</html>
	</xsl:template>
	<xsl:template match="//row">
		<tr>
			<td>
				<xsl:value-of select="date"/>
			</td>
			<td>
				<xsl:value-of select="name"/>
			</td>
		</tr>
	</xsl:template>
</xsl:transform>
 

-----Original Message-----
From: Chris [mailto:phatfish@xxxxxxxxx] 
Sent: Friday, March 18, 2005 10:52 AM
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
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