This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Building an index in XSL




Hi All:

I need to build an index in an XSL stylesheet that has a variable number of 
entry groupings ( numbers, a-e, f-i, etc..).  Each grouping will appear in 
its own HTML table, however, if there are no entries that belong to that 
grouping ( nothing starts with a, b, c, d or e) I do not want the grouping 
or even the table to appear/be created.  I have a partial solution 
implemented but I can not figure out how to not create the HTML table or 
grouping if no matches are found.  Below is a sample XML and XSL based on 
what I am trying to accomplish (sorry for the large email).

Perhaps the way I set it up is not the best way to approach what I need, if 
anybody has an tips or pointers that would be cool, however, please note 
that I would like to keep the <entry-groupings/> inside the XML (I include 
that dynamically using Cocoon and like the fact that I can change my 
groupings).


Thanks in advance

Chris

=======BEGIN XML=======
<page>
   <entry-groupings>
     <grouping name="#">
        <entry>1</entry>
        <entry>2</entry>
        <!-- and so forth for 3 - 0-->
     </grouping>
     <grouping name="a-e">
        <entry>a</entry>
        <entry>A</entry>
        <entry>b</entry>
        <!-- this would continue for b - e, both upper and lower case 
letters -->
        ...
      </grouping>
        <!-- I would have other grouping groupings for f - h and so forth 
(not shown here) -->
    </entry-groupings>

   <content>
     <category name="Bogus">
       <product name="A foo"/>
       <product name="Bar"/>
      </category>
     <category name="Stuff that isn't good for you but tastes good, well 
sort of">
       <product name="3 Musketeers"/>
      </category>

     <category name="Ice rink stuff">
       <product name="Zamboni"/>
     </category>
     <!-- potentially more categories with products -->
</content>
</page>
=======BEGIN XSL======
<!--stylesheet, standard templates not shown -->

<xsl:template match="page">
   <!-- bunch of stuff to set up the page not included-->
   <xsl:apply-templates select="/page/entry-groupings/grouping"/>
    <!-- bunch HTML stuff to finish off the page not included -->
</xsl:template>

<xsl:template match="group">
<!-- I need to do some test here that would see if any product in any of 
the categories start with a letter (case irrelevant) in the current 
group.  The way it is currently implemented I can't :(-->
<table border="1" width="100%">
   <tr><td colspan="2" bgcolor="#AAAAAA"><a name="{@name}"><b><xsl:value-of 
select="@name"/></b></a></td></tr>
   <xsl:apply-templates/>
</table>
<br/>
</xsl:template>

<xsl:template match="entry-groupings/grouping/entry">
   <!--The matching template for product is not included (it just displays 
it in a table) -->
   <xsl:apply-templates 
select="/page/content/category/product[substring(@name,1,1)=current()]"/>
</xsl:template>


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]