xsl-list
[Top] [All Lists]

simple recursion

2004-08-23 19:01:54
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="{(_at_)Filename}" title="{(_at_)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


<Prev in Thread] Current Thread [Next in Thread>