Recursive nested elements woe

G

GR33DY

Hi every-one,

(Deleted and reposted to avoid sp@m)

I have an XML file that looks like this:

_____________________________XML_________________________________

<root>
<nextlevel>
<init>
<element1>
Content
</element1>
<element2>
More content
</element2>
...etc
<message>
<element1>
Content
</element1>
<element2>
More content
</element2>
...etc
<message>
<element1>
Content
</element1>
<element2>
More content
</element2>
...etc
</message>
</message>
</init>
</nextlevel>
</root>

_________________________________________________________________

The <message> nodes may well contain other <message> nodes which could
contain other <message> nodes etc. etc. ad infinitum(well, almost!)

My problem is that when it comes to the XSL, I want to nest these nodes
and indent them and this is what I have so far:

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

<xsl:template match="init">
<xsl:value-of select="element1"/>
<xsl:value-of select="element2"/><br />
</xsl:template>

<xsl:template name ="message" match="message">
<blockquote>
<xsl:value-of select="element1"/>
<xsl:value-of select="element2"/>
<xsl:for-each select="message[count(descendant::message)!='0']">
<xsl:call-template name="message"/>
</xsl:for-each>
</blockquote>
</xsl:template>

_________________________________________________________________

However, this only nests up to and including the second <message> node
and no further. Any help appreciated :)

Tom.
 
G

GR33DY

Cat said:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

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

<xsl:template match="init">
<xsl:value-of select="element1"/>
<xsl:value-of select="element2"/><br />
</xsl:template>

<xsl:template name ="message" match="message">
<blockquote>
<xsl:value-of select="element1"/>
<xsl:value-of select="element2"/>
<xsl:for-each select="message[count(descendant::message)!='0']">
<xsl:call-template name="message"/>
</xsl:for-each>
</blockquote>
</xsl:template>

_________________________________________________________________

Tom,
Wouldn't it be better/simplier to do the recursion with the normal
xsl:apply-templates like so.

============= XSLT ================
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

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

<xsl:template match="init|nextlevel">
<xsl:apply-templates/>
</xsl:template>

<xsl:template match="element1|element2">
<xsl:value-of select="."/>
</xsl:template>

<xsl:template match="message">
<blockquote>
<xsl:apply-templates/>
</blockquote>
</xsl:template>
</xsl:stylesheet>
===================================
Is this what you were looking for?
- --
Cat

http://www.ratrobot.com/writing/tiger/ TradeMark Tiger is an economic
argument for conservation. Why not use nature to save itself?
Fri Jun 25 21:55:01 UTC 2004
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (GNU/Linux)

iD4DBQFA3J81KHRjYtwQ1QARApozAJipLbIw+zFzA5t+BiSYym9dBYYrAKCxdHlc
u12mBgs54ZzHz18we4IPzA==
=xh+N
-----END PGP SIGNATURE-----
That's nice and simple!
My solutions tend to get more and more complicated :)
How would I now go about adding some formatting to the element1 &
element2 content?

Thanks for your help, it's very much appreciated.
 
G

GR33DY

Cat said:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

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

<xsl:template match="init">
<xsl:value-of select="element1"/>
<xsl:value-of select="element2"/><br />
</xsl:template>

<xsl:template name ="message" match="message">
<blockquote>
<xsl:value-of select="element1"/>
<xsl:value-of select="element2"/>
<xsl:for-each select="message[count(descendant::message)!='0']">
<xsl:call-template name="message"/>
</xsl:for-each>
</blockquote>
</xsl:template>

_________________________________________________________________

Tom,
Wouldn't it be better/simplier to do the recursion with the normal
xsl:apply-templates like so.

============= XSLT ================
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

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

<xsl:template match="init|nextlevel">
<xsl:apply-templates/>
</xsl:template>

<xsl:template match="element1|element2">
<xsl:value-of select="."/>
</xsl:template>

<xsl:template match="message">
<blockquote>
<xsl:apply-templates/>
</blockquote>
</xsl:template>
</xsl:stylesheet>
===================================
Is this what you were looking for?
- --
Cat

http://www.ratrobot.com/writing/tiger/ TradeMark Tiger is an economic
argument for conservation. Why not use nature to save itself?
Fri Jun 25 21:55:01 UTC 2004
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (GNU/Linux)

iD4DBQFA3J81KHRjYtwQ1QARApozAJipLbIw+zFzA5t+BiSYym9dBYYrAKCxdHlc
u12mBgs54ZzHz18we4IPzA==
=xh+N
-----END PGP SIGNATURE-----
That's lovely and simple, my efforts get recursively more complicated ;)
Thanks for your help.
Tom
 
C

Cat

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

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

<xsl:template match="init">
<xsl:value-of select="element1"/>
<xsl:value-of select="element2"/><br />
</xsl:template>

<xsl:template name ="message" match="message">
<blockquote>
<xsl:value-of select="element1"/>
<xsl:value-of select="element2"/>
<xsl:for-each select="message[count(descendant::message)!='0']">
<xsl:call-template name="message"/>
</xsl:for-each>
</blockquote>
</xsl:template>

_________________________________________________________________
Tom,
Wouldn't it be better/simplier to do the recursion with the normal
xsl:apply-templates like so.

============= XSLT ================
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

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

<xsl:template match="init|nextlevel">
<xsl:apply-templates/>
</xsl:template>

<xsl:template match="element1|element2">
<xsl:value-of select="."/>
</xsl:template>

<xsl:template match="message">
<blockquote>
<xsl:apply-templates/>
</blockquote>
</xsl:template>
</xsl:stylesheet>
===================================
Is this what you were looking for?
- --
Cat

http://www.ratrobot.com/writing/tiger/ TradeMark Tiger is an economic
argument for conservation. Why not use nature to save itself?
Fri Jun 25 21:55:01 UTC 2004
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (GNU/Linux)

iD4DBQFA3J81KHRjYtwQ1QARApozAJipLbIw+zFzA5t+BiSYym9dBYYrAKCxdHlc
u12mBgs54ZzHz18we4IPzA==
=xh+N
-----END PGP SIGNATURE-----
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,763
Messages
2,569,562
Members
45,038
Latest member
OrderProperKetocapsules

Latest Threads

Top