Re: [xsl] without a loop file get the element list

Subject: Re: [xsl] without a loop file get the element list
From: "Andrew Welch" <andrew.j.welch@xxxxxxxxx>
Date: Wed, 13 Aug 2008 11:16:19 +0100
>  I have following xml and XSL file as bellow.
>  An application calls the XSL file and disply the
>  nodes
>  contents in a windows as a html.
>  With a for-each loop i get each node content
>  (element)
>  more times. For example in this sample xml file each
>  element is displayed three times because there are 3
>  elements in the xml file and so on.
>  I t seems that each time ""for each" elment in the
>  for-each loop, the whole elements are displayed!
>  Calling the xml file from web browser the XSL
>  Stylesheet works fine and the elemnts are
>  displayed only one time as expected.
>  I thought to walk throw the 'elements list' without
>  the for-each loop and display the elements but I
>  don't know how to do it!!??
>
>  Thank you for your help
>
>  *******************************
> <?xml version="1.0" encoding="iso-8859-1"?>
> <?xml-stylesheet type="text/xsl" href="text-1.xsl" ?>
> <document>
>   <elements>
>     <element type="author">Author-Element</element>
>      <element
> type="paragraph">Paragraph-Element</element>
>    <element type="title">Title-Element</element>
>  </elements>
> </document>
>
> *****************************************************************
> <?xml version="1.0" encoding="iso-8859-1"?>
> <xsl:stylesheet version="1.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
>  <xsl:template match="/">
>
>    <html>
>      <body>
>     <table >
>
>        <xsl:for-each select="document/elements/element">
>
>        <tr><td>
>        <!--  <xsl:value-of disable-output-escaping="yes"
> select="current()"/>  -->
>           <xsl:value-of select="."/>
>                </td></tr>
>
>   </xsl:for-each>
>
> </table>
>
>
>      </body>
>    </html>
>  </xsl:template>
> </xsl:stylesheet>


It's hard to tell what you're after, but it looks like you're trying
to output a table based on that input where <elements> is a row and
<element> is a cell, so you just want:

	<xsl:template match="/">
		<html>
			<body>
				<table>
					<xsl:apply-templates/>
				</table>
			</body>
		</html>
	</xsl:template>

	<xsl:template match="elements">
		<tr>
			<xsl:apply-templates/>
		</tr>
	</xsl:template>

	<xsl:template match="element">
		<td>
			<xsl:value-of select="."/>
		</td>
	</xsl:template>



--
Andrew Welch
http://andrewjwelch.com
Kernow: http://kernowforsaxon.sf.net/

Current Thread