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

RE: Nested xsl:sort problems

Subject: RE: Nested xsl:sort problems
From: "Josh Canfield" <josh.canfield@xxxxxxxxxxxx>
Date: Mon, 8 Dec 2003 17:54:53 -0800
nested xsl for each
I believe the problem was that you were off by one level when doing your sorts. Here is a cut down version of the XSL...

	<!-- Sorted primary elements -->
	<xsl:for-each select="/indices/index/entry/primary">
		<xsl:sort data-type="text" select="@name"/>
		<block><xsl:value-of select="@name"/></block>
		<!-- Sorted secondary elements -->
		<xsl:for-each select="secondary">
			<xsl:sort data-type="text" select="@name"/> 
			<block><xsl:value-of select="@name"/></block>
			<!-- Sorted tertiary elements -->
			<xsl:for-each select="tertiary">
				<xsl:sort data-type="text" select="@name"/> 
				<block><xsl:value-of select="@name"/></block>
			</xsl:for-each>
		</xsl:for-each>
	</xsl:for-each>

This is repetitive, and could probably be replaced with something recursive...

Does this solve your problem?
Josh

-----Original Message-----
From: Fred Wells [mailto:Fred.Wells@xxxxxxxxxxxxxxxx]
Sent: Monday, December 08, 2003 3:53 PM
To: XSL-List@xxxxxxxxxxxxxxxxxxxxxx
Subject:  Nested xsl:sort problems


I having a problem with sorting I need to sort down three levels but for
some reason I can only get the first level tto sort following is the xml
and the xsl respectively:

<?xml version="1.0" standalone="yes"?>
<indices>
    <index bookId="ISBN_chapterX">
        <entry>
            <primary name="art history" relPages="191,192,193,194">
            <secondary name="artists">
            <tertiary name="picasso, pablo" relPages="250"/>
            <tertiary name="pollock, jackson" relPages="261"/>
            </secondary>
            <secondary name="architecture">
            <tertiary name="wright, frank lloyd" relPages="262"/>
            </secondary>
            </primary>
        </entry>
        <entry>
            <primary name="awards">
            <secondary name="television" relPages="171,172">
            <tertiary name="emmy" relPages="180"/>
            <tertiary name="golden globe" relPages="189,211"/>
            <tertiary name="screen actors guild" relPages="11"/>
            </secondary>
            <secondary name="music">
            <tertiary name="grammy" relPages="134"/>
            <tertiary name="mtv video music" relPages="135,180"/>
            </secondary>
            <secondary name="theater" relPages="15,16,210">
            <tertiary name="tony" relPages="189"/>
            </secondary>
            </primary>
        </entry>
        <entry>
            <primary name="newspapers" relPages="1,3,4,90">
            <secondary name="new york" relPages="91,92,95">
            <tertiary name="village voice" relPages="115"/>
            <tertiary name="wall street journal" relPages="116,117"/>
            <tertiary name="new york post" relPages="118,119,120"/>
            <tertiary name="new york times"
relPages="121,122,123,124,125"/>
            </secondary>
            <secondary name="chicago" relPages="17,18,19,20">
            <tertiary name="chicago tribune" relPages="17"/>
            <tertiary name="chicago sun times" relPages="18,19,20"/>
            </secondary>
            </primary>
        </entry>
        <entry>
            <primary name="games" relPages="21">
            <secondary name="chess" relPages="67"/>
            <secondary name="checkers" relPages="68"/>
            <secondary name="backgammon" relPages="71,72"/>
            </primary>
        </entry>
    </index>
</indices>


and the xsl:

                   <xsl:for-each select="//index/entry">
                       <xsl:sort data-type="text"
select="./primary/@name"/>
 
                       <xsl:for-each select="./primary">
                           <xsl:sort data-type="text"
select="./secondary/@name"/>
  
                         <fo:block font-family="Helvetica,Arial"
font-size="7pt" font-weight="bold"  text-align="left">
                             <xsl:value-of select="@name"/>
                            <xsl:if test=" @relPages != '' ">
                            <xsl:text>&#xA;&#xA;</xsl:text>
                            <xsl:value-of select="@relPages"/>
                            </xsl:if>
                        </fo:block>

                                <xsl:for-each select="./secondary">
                                   <xsl:sort data-type="text"
select="./tertiary/@name"/> 

                         <fo:block font-family="Helvetica,Arial"
font-size="7pt"  start-indent="5pt" text-align="left">
                             <xsl:value-of select="@name"/>
                            <xsl:if test=" @relPages != '' ">
                            <xsl:text>&#xA;&#xA;</xsl:text>
                            <xsl:value-of select="@relPages"/>
                            </xsl:if>
                        </fo:block>

                                <xsl:for-each select="./tertiary">
                                    
                          <fo:block font-family="Helvetica,Arial"
font-size="7pt" font-style="italic" start-indent="10pt"
text-align="left">
                             <xsl:value-of select="@name"/>
                            <xsl:if test=" @relPages != '' ">
                            <xsl:text>&#xA;&#xA;</xsl:text>
                            <xsl:value-of select="@relPages"/>
                            </xsl:if>
                        </fo:block>
                          
                                </xsl:for-each>
                           </xsl:for-each>
                       </xsl:for-each>
                   </xsl:for-each>

This seems only to work for the 'primary' element and not the
'secondary' and 'tertiary'. I'm pretty new to this so any advice is
greatly appreciated.
thanks
-fw


Frederick Wells
Capps Digital
35 W Wacker
30th Fl.
Chicago, IL
312.220.3056
www.cappsdigital.com

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


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.