Selecting node sets for page by page output - without using for-each or mutiple ifs

Subject: Selecting node sets for page by page output - without using for-each or mutiple ifs
From: Aaron Miller <amiller@xxxxxxxxx>
Date: Tue, 29 Aug 2000 12:09:28 -0700
Hello all,

I am stumped on this one. I have an XML Doc like this:

<?xml version="1.0" ?>
<root>
<user>
  <user_name>username</user_name>
  <greet_name>username</greet_name>
  <station id="1">
    <pseudonym>pseudonym</pseudonym>
    <id>5</id>
  </station>
</user>
<params>
</params>

<clickCastProgram>
  <topicStoryContainerList>
    <topicStoryContainer>
      <topic>
        <name>Top Stories</name>
        <id>6</id>
      </topic>
      <storyList>
        <story>
          <id>999</id>
          <name>story 999 name</name>
          <description>story 999 description</description>
          <activation_date>08/10/2000</activation_date>
          <video>
            <activation_date>08/10/2000</activation_date>
            <graphic name="small">
              
<external_reference>http://www.zatso.com/image_url.gif</external_reference>
            </graphic>
            <length>100</length>
            <station>
              <pseudonym>Pseudonym</pseudonym>
            </station>
          </video>
          <enhancementList></enhancementList>
        </story>
        <story>
          <id>998</id>
          <name>story 998 name</name>
          <description>story 998 description</description>
          <activation_date>08/10/2000</activation_date>
          <video>
            <activation_date>08/10/2000</activation_date>
            <graphic name="small">
              
<external_reference>http://www.zatso.com/image_url.gif</external_reference>
            </graphic>
            <length>100</length>
            <station>
              <pseudonym>Pseudonym</pseudonym>
            </station>
          </video>
          <enhancementList></enhancementList>
        </story>
        <story>
          <id>997</id>
          <name>story 997 name</name>
          <description>story 997 description</description>
          <activation_date>08/10/2000</activation_date>
          <video>
            <activation_date>08/10/2000</activation_date>
            <graphic name="small">
              
<external_reference>http://www.zatso.com/image_url.gif</external_reference>
            </graphic>
            <length>100</length>
            <station>
              <pseudonym>Pseudonym</pseudonym>
            </station>
          </video>
          <enhancementList></enhancementList>
        </story>
        <story>
          <id>996</id>
          <name>story 996 name</name>
          <description>story 996 description</description>
          <activation_date>08/10/2000</activation_date>
          <video>
            <activation_date>08/10/2000</activation_date>
            <graphic name="small">
              
<external_reference>http://www.zatso.com/image_url.gif</external_reference>
            </graphic>
            <length>100</length>
            <station>
              <pseudonym>Pseudonym</pseudonym>
            </station>
          </video>
          <enhancementList></enhancementList>
        </story>
      </storyList>
    </topicStoryContainer>
    <topicStoryContainer>
      <topic>
        <name>topic name 2</name>
        <id>7</id>
      </topic>
      <storyList>
        <story>
          <id>889</id>
          <name>story 889 name</name>
          <description>story 889 description</description>
          <activation_date>08/10/2000</activation_date>
          <video>
            <activation_date>08/10/2000</activation_date>
            <graphic name="small">
              
<external_reference>http://www.zatso.com/image_url.gif</external_reference>
            </graphic>
            <length>100</length>
            <station>
              <pseudonym>Pseudonym</pseudonym>
            </station>
          </video>
          <enhancementList></enhancementList>
        </story>
        <story>
          <id>888</id>
          <name>story 888 name</name>
          <description>story 888 description</description>
          <activation_date>08/10/2000</activation_date>
          <video>
            <activation_date>08/10/2000</activation_date>
            <graphic name="small">
              
<external_reference>http://www.zatso.com/image_url.gif</external_reference>
            </graphic>
            <length>100</length>
            <station>
              <pseudonym>Pseudonym</pseudonym>
            </station>
          </video>
          <enhancementList></enhancementList>
        </story>
        <story>
          <id>887</id>
          <name>story 887 name</name>
          <description>story 887 description</description>
          <activation_date>08/10/2000</activation_date>
          <video>
            <activation_date>08/10/2000</activation_date>
            <graphic name="small">
              
<external_reference>http://www.zatso.com/image_url.gif</external_reference>
            </graphic>
            <length>100</length>
            <station>
              <pseudonym>Pseudonym</pseudonym>
            </station>
          </video>
          <enhancementList></enhancementList>
        </story>
        <story>
          <id>886</id>
          <name>story 886 name</name>
          <description>story 886 description</description>
          <activation_date>08/10/2000</activation_date>
          <video>
            <activation_date>08/10/2000</activation_date>
            <graphic name="small">
              
<external_reference>http://www.zatso.com/image_url.gif</external_reference>
            </graphic>
            <length>100</length>
            <station>
              <pseudonym>Pseudonym</pseudonym>
            </station>
          </video>
          <enhancementList></enhancementList>
        </story>
      </storyList>
    </topicStoryContainer>
  </topicStoryContainerList>
</clickCastProgram>
</root>

As you can see, each topicStoryContainer has a topic and a storyList, and
all the topicStoryContainers make up a topicStoryContainerList. I want to
write an XSLT that grabs five nodes per page, based on startRange and
endRange parameters, and creates appropriate navigation for previous and
next pages. 

**So my question is this**: how do I grab five <story>s per page, in
sequence, with topic headings inserted in the appropriate places, _without_
using <xsl:for-each> or <xsl:if>?

I've tried using the position() function to determine ranges of things, but
since this is contextual, the topic elements seem to reset it for each
storyList.

Is this even possible? I am curious since I have been told it's much more
efficient and desirable to use <xsl:apply-templates> and "modes" rather than
using a lot of explicit logical branching for this sort of thing.

Thanks,
aaron


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


Current Thread