xsl-list
[Top] [All Lists]

Alphabetic Sort with Letter Headers (again)

2004-11-01 11:35:22

Hello XSL list,

I tried to send this last week but somehow my webmail converted all of my html and xml code snippet into web display text.

Apparently I need help with my help :).

I have been trying to sort and display a a set of elements alphabetically and grab the first letter for a group header. The

header would only appear once and won't appear if there is an empty set (eg. 'X'). For example I want to transform something

like:

<content>
<element>Bob</element>
<element>Craig</element>
<element>Al</element>
<element>Frank</element>
<element>Bill</element>
<element>Barb</element>
<element>Andrew</element>
<element>Felix</element>
<element>Farah</element>
</content>

into:

A
Andrew
Al

B
Barb
Bill
Bob

C
Craig

F
Farah
Felix
Frank

The xml I am using is not flat, ie. there are elements being sorted that are 'cousins' of one another, not just siblings. The

xsl I have written so far gets the sort OK and strips off the first letter but does so for each element sorted.

I have tried to test the pulled letter against that of the following-sibling but the sort interferes with that. I have also

tried to create a variable for the letter at the next position() but that didn't work either.

The xsl I use:

<xsl:template match="body" mode="alpha-title">
        <xsl:for-each select="part/chapters/mapunits/maps">
                <xsl:sort select="maptitle"/>
                <xsl:variable name="maptitle" select="maptitle"/>
<xsl:variable name="firstletter" select="substring($maptitle,1,1)"/>
                <div class="trackNumber">
                        <xsl:value-of select="$firstletter"/>
                </div>
                <div class="mapTitle">
<a href="../../Maps/{../../@chap}/{../@mapunitNumber}/{(_at_)mapNumber}/Normal/">
                                        <xsl:value-of select="maptitle"/>
                        </a>
                </div>
        </xsl:for-each>
</xsl:template>


A relevant snippet of xml schema:

<body>
       <part>
            <chapters>
                 <mapunits>
                      <maptitle/>
                      <maps/>
                 </mapunits>
            </chapters>
        </part>
</body>

I am pulling all the maptitles and maps from all of the parts.

Has anyone tried something like this before?

Thanks for your time,

Dave
PS. I have tried again sending through pine.


<Prev in Thread] Current Thread [Next in Thread>
  • Alphabetic Sort with Letter Headers (again), D Laurie <=