Subject: Re: Identify last node in nested nodeset with same name
From: Mukul Gandhi <mukul_gandhi@xxxxxxxxx>
Date: Fri, 24 Jun 2005 01:04:38 -0700 (PDT)
|
Hi Mat,
Please try this XSL .. It seems to solve the problem
...
<?xml version="1.0"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="xml" indent="yes" />
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*" />
</xsl:copy>
</xsl:template>
<xsl:template match="root">
<ul>
<xsl:apply-templates />
</ul>
</xsl:template>
<xsl:template match="menu">
<xsl:choose>
<xsl:when test="child::*">
<li><xsl:value-of select="@name" /></li>
<ul>
<xsl:apply-templates />
</ul>
</li>
</xsl:when>
<xsl:otherwise>
<li>
<xsl:value-of select="@name" />
</li>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
Regards,
Mukul
--- Mat Bergman <matbergman@xxxxxxxxx> wrote:
> I am working with XML data that shares the same
> element name for each node set, for example:
>
> <menu name="link1"/>
> <menu name="link2">
> <menu name="link2a"/>
> <menu name="link2b"/>
> </menu>
>
> My XSL stylesheet transforms this into an HTML
> unordered list, like this:
> <ul>
> <li>link1</li>
> <li>link2
> <ul>
> <li>link2a</li>
> <li>link2b</li>
> </ul>
> </li>
> </ul>
>
> I can't figure out how to identify the last
> second-tier node (in this example "link2b") so that
> the stylesheet can write the closing </ul> tag for
> the
> nested list. I thought I would reference it with
> something like <xsl:if test="/menu/menu[last()]">,
> but
> my XPath must be incorrect because it fails.
>
> I am currently writing the opening <ul> and closing
> </li> tags for the nested list with this:
>
> <xsl:template match="menu">
> <xsl:if test="count(menu)>0">
> <xsl:text><ul></xsl:text>
> </xsl:if>
>
> <xsl:if test="count(menu)=0">
> <xsl:text></li></xsl:text>
> </xsl:if>
> </xsl:template>
>
> If I only knew how to identify the last node in
> /menu/menu, I could easily write the closing tag.
>
> Thanks,
>
> -Mat
>
>
>
>
> __________________________________________________
> Do You Yahoo!?
> Tired of spam? Yahoo! Mail has the best spam
> protection around
> http://mail.yahoo.com
>
>
____________________________________________________
Yahoo! Sports
Rekindle the Rivalries. Sign up for Fantasy Football
http://football.fantasysports.yahoo.com
|