[xsl] simple recursion

Subject: [xsl] simple recursion
From: Jan Limpens <jan.limpens@xxxxxxxxx>
Date: Mon, 23 Aug 2004 23:01:54 -0300
hi,

I am quite beginner when it comes to XML and related technologies, and
I hope someone will give me an explaination on how to solve the
following problem.

I use an XML file to organize a website:

<?xml version="1.0" encoding="utf-8" ?>
<Site Title="My Site">
	<Document MIMEType="text/html" Filename="Default.aspx"
Title="Homepage" Description="This is where it all began">
		<Document MIMEType="text/html" Filename="Subpage.aspx"
Title="Subpage" Description="This is where it continued">
			<Document MIMEType="text/html" Filename="SubSubpage.aspx"
Title="SubSubpage" Description="Now there is so much more" />
			<Document MIMEType="text/html" Filename="SubSubpage2.aspx"
Title="SubSubpage2" Description="Now there is so much more,too">
				<Document MIMEType="text/html" Filename="SubSubSubpage.aspx"
Title="SubSubpage2" Description="Now there is so much more,too" />
			</Document>
			<Document MIMEType="image/jpeg" Filename="Beautiful.jpeg" Title="A
beautiful Picture" Description="It shows pure beauty" />
		</Document>
		<Document MIMEType="text/html" Filename="Subpage2.aspx"
Title="Subpage2" Description="This is where it continued" />
		<Document MIMEType="text/html" Filename="AnotherPage.htm"
Title="Another Page" Description="" />
	</Document>
</Site>

then I use this xsl stylesheet to convert it to html

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
<xsl:template match="/">
	<html>
		<body>
			<ol>
				<xsl:apply-templates />
			</ol>
		</body>
	</html>
</xsl:template>
<xsl:template match="Document">
		<li>
			<a href="{@Filename}" title="{@Description}">
				<xsl:value-of select="@Title" />
			</a>
			<xsl:if test="node()">
			<ol>
				<xsl:for-each select="Document">
					<xsl:apply-templates />
				</xsl:for-each>
			</ol>
			</xsl:if>
		</li>
</xsl:template>
</xsl:stylesheet>

Somehow the recursion stops somewhere unexpected (for me). It shows like:

<html>
  <body>
    <ol>
      <li>
        <a href="Default.aspx" title="This is where it all began">Homepage</a>
        <ol>
          <li>
            <a href="SubSubpage.aspx" title="Now there is so much
more">SubSubpage</a>
          </li>
          <li>
            <a href="SubSubpage2.aspx" title="Now there is so much
more,too">SubSubpage2</a>
            <ol>
            </ol>
          </li>
          <li>
            <a href="Beautiful.jpeg" title="It shows pure beauty">A
beautiful Picture</a>
          </li>
        </ol>
      </li>
    </ol>
  </body>
</html>

So obviously it does not actually recurse, it seems, whenever it
enters a deeper level, the parent's following silblings are left out.
But I can not find why this is so. Help?

-- 
Jan Limpens
http://www.limpens.com

Current Thread