LOL. Thank you so much! That was embarasingly easy once you pointed
out that I should match against the element. So all I needed was
this...
<xsl:template match="dir[(_at_)name='dir6']">
<ul>
<xsl:for-each select="ancestor::*">
<li><xsl:value-of select="@name"/></li>
</xsl:for-each>
</ul>
<ul>
<li><xsl:value-of select="@name"/>
<ul>
<xsl:for-each select="./dir">
<li><xsl:value-of select="@name"/></li>
</xsl:for-each>
</ul>
</li>
</ul>
</xsl:template>
It's slightly different to your approach where you suggested
<xsl:apply-templates mode="list-dir"
select="parent::dir/ancestor::dir"/>. Could you tell me what this
does?
Once again thank you. I've been banging my head on this one for too long!
On Tue, Mar 31, 2009 at 5:16 PM, Wendell Piez
<wapiez(_at_)mulberrytech(_dot_)com> wrote:
Jim,
If I understand this correctly, you don't actually have to recursively call
a template. You only have to iterate through (a) ancestor dir elements of
your parent::dir, and then (2) the parent dir element (and maybe its
descendants).
The reason I say "maybe" is that the source as offered gives two page6
pages:
At 11:28 AM 3/31/2009, you wrote:
<dir name="dir1" id="x1">
<page pname = "page1"></page>
<dir name="dir2" id="x2">
<page pname = "page2"></page>
<dir name="dir3" id="x3">
<page pname = "page3"></page>
</dir>
<dir name="dir4" id="x4">
<page pname = "page4"></page>
<dir name="dir5" id="x5">
<page pname = "page5"></page>
<page pname = "page6"></page>
<dir name="dir6" id="x6">
<page pname = "page6"></page>
</dir>
</dir>
</dir>
</dir>
</dir>
So we don't know on what basis the dir6 is included in the result you say
you want.
The above is a snapshot as it can go down "n" levels. If I'm at page6
then my navigation needs to be:-
<ul>
<li>dir1</li>
<li>dir2</li>
<li>dir4</li>
</ul>
<ul>
<li>dir5</li>
<li>dir6</li>
</ul>
In any case, something like this (assuming the second page6 in your stated
source is erroneous):
<xsl:template match="page6">
<ul>
<xsl:apply-templates mode="list-dir" select="parent::dir/ancestor::dir"/>
<!-- apply-templates generates output ordered as they are in the source,
so this will get dir1, dir2, dir4 -->
</ul>
<ul>
<xsl:apply-templates mode="list-dir"
select="parent::dir/descendant-or-self::dir"/>
<!-- this gets dir5 (the parent of page6) and dir6 (the dir inside dir5)
-->
</ul>
</xsl:template>
I hope that helps --
Wendell
======================================================================
Wendell Piez
mailto:wapiez(_at_)mulberrytech(_dot_)com
Mulberry Technologies, Inc. http://www.mulberrytech.com
17 West Jefferson Street Direct Phone: 301/315-9635
Suite 207 Phone: 301/315-9631
Rockville, MD 20850 Fax: 301/315-8285
----------------------------------------------------------------------
Mulberry Technologies: A Consultancy Specializing in SGML and XML
======================================================================
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail:
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--