xsl-list
[Top] [All Lists]

Re: [xsl] mod position() tests positive all of the time

2007-01-02 09:28:31
Allen Jones wrote:
I'm still having the same counting
problem after working with some of the suggestions.  I have worked
mainly with Abel's and Chuck Knell's suggestion, and I'm getting the
same results.  This is output that comes from an XML gateway into a
PHP/Sablotron script for formatting.

As per Abel's suggection, the input xml data I am using is included in
the post:

Thanks for your input. That clarifies a lot. Others have already pointed out the difference between the siblings and cousins of object and thumbnail nodes. Here's a solution that works with your input, using only templates and no xsl:for-each (push model) or xsl:choose (often, an xsl:choose can be replaced by a template rule). It's largely a matter of taste which solution you want to use.

Because the thumbnail node lying inside the object node, the need for a separated mode has gone. Basically, the whole template becomes easier and more straightforward. I upgraded it to work with your input. A side effect of the chosen xpaths is that it also works with a structure that has more than one thumbnail inside an object node. I added some comments for clarification.

Consider placing "5" (your mod value) in a global variable. That will ease modification later on. Putting it in a parameter will make it configurable from the processor (if you can set parameters, that is).

HtH,

Cheers,
-- Abel Braaksma
  http://www.nuntia.nl

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
   version="1.0"
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
<xsl:output method="html" encoding="UTF-8" indent="yes"/>

   <!--
       This one removes default template
       output from other nodes that contain text.
       Replace this with the rest of
       your own templates
   -->
   <xsl:template match="/insightResponse/searchResponse
       /collectionResultSet/*" priority="0"/>
<xsl:template match="collectionResultSet">
       <html><body>
           <table>
               <!--
                   you probably want to add logic here for
                   collection name and institution etc.
               -->
               <xsl:apply-templates select="object" />
           </table>
       </body></html>
   </xsl:template>
<!-- match each fifth object node -->
   <xsl:template match="object[position() mod 5 = 1]">
       <xsl:variable name="pos" select="position()" />
       <tr>
           <xsl:apply-templates
               select="thumbnail |
               (following-sibling::object/thumbnail)
               [position() &lt; 5]"
               />
       </tr>
   </xsl:template>
<!-- create a thumbnail -->
   <xsl:template match="thumbnail">
       <td>
           <img src="{(_at_)URL}" />
           <xsl:apply-templates />
       </td>
   </xsl:template>
<!-- create label -->
   <xsl:template match="label">
       <br /><xsl:value-of select="."/>
   </xsl:template>
</xsl:stylesheet>

--~------------------------------------------------------------------
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>
--~--

<Prev in Thread] Current Thread [Next in Thread>
  • Re: [xsl] mod position() tests positive all of the time, Abel Braaksma <=