This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: Selecting node sets for page by page output - without usingfor-each or mutiple ifs
- To: <xsl-list at mulberrytech dot com>
- Subject: Re: Selecting node sets for page by page output - without usingfor-each or mutiple ifs
- From: Aaron Miller <amiller at zatso dot com>
- Date: Tue, 29 Aug 2000 15:10:12 -0700
- Reply-To: xsl-list at mulberrytech dot com
replying to myself ...
I have managed to do this with the following xsl in my match="/" template:
<xsl:apply-templates select="descendant::story[position() >= $start and
position() <= $end]"/><br/>
then i use a variable and a single <xsl:if> to check for the presence of a
topic name:
<xsl:variable name="pos"><xsl:number/></xsl:variable>
<xsl:if test="number($pos)=1">
<xsl:apply-templates select="../../topic"/>
</xsl:if>
Maybe this is ugly, but it works without using xsl:for each and <xsl:choose>
> From: Aaron Miller <amiller@zatso.com>
> Reply-To: xsl-list@mulberrytech.com
> Date: Tue, 29 Aug 2000 12:09:28 -0700
> To: <xsl-list@mulberrytech.com>
> Subject: Selecting node sets for page by page output - without using for-each
> or mutiple ifs
>
> 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
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list