[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: Iterate through tree structure

Subject: Re: Iterate through tree structure
From: jim mcgovern <jim.mcgovern2@xxxxxxxxxxxxxx>
Date: Tue, 31 Mar 2009 18:20:46 +0100
Re:  Iterate through tree structure
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[@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@xxxxxxxxxxxxxxxx>
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@xxxxxxxxxxxxxxxx
> 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
> ======================================================================

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.