xsl-list
[Top] [All Lists]

RE: looping in xslt

2004-04-29 06:46:25
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
        <xsl:template match="/root">
                <xsl:element name="root">
<!-- loop through all rec/date nodes -->                        
                        <xsl:for-each select="rec/date">
<!-- if the context date/value node is the first in the tree with a given
value (and the set of all first nodes with the given value will be the set
of all unique nodes -->                         
                                <xsl:if test="generate-id(.) =
generate-id(/root/rec/date[value=current()/value])">
                                        <xsl:element name="rec">
                                                <xsl:element name="date">
                                                        <xsl:element
name="value">
        
<xsl:value-of select="."/>
                                                        </xsl:element>
                                                </xsl:element>
                                        </xsl:element>
                                </xsl:if>
                        </xsl:for-each>
                </xsl:element>
        </xsl:template>
</xsl:stylesheet>

-----Original Message-----
From: Joeri Belis [mailto:joeri(_dot_)belis(_at_)nollekens(_dot_)be] 
Sent: Thursday, April 29, 2004 9:12 AM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] looping in xslt

I have a big xml file that comes out of a db ( + 3Mb ).
It contains a lot of date values. My xslt transformation needs to create a
new xml file
from this dump xml file and add lines for every date just ones.
So the file may contain 100 date values but only 10 different dates

( this example has 5 dates but only 3 different dates )
<?xml version="1.0"?>
<root>
  <rec>
    <date><value>010104</value></date>
  </rec>
  <rec>
    <date><value>010104</value></date>
    <date><value>020104</value></date>
  </rec>
  <rec>
    <date><value>020104</value></date>
    <date><value>030104</value></date>
  </rec>
</root>

to find these unique dates i use
<xsl:key name="mydates" match="date" use="value"/>
and to loop 3 times i use.
<xsl:for-each select="/root/rec/date[generate-id() =
generate-id(key('mydates',value)[1])]">

I need to loop multiple times so i repeat the "for-each" multiple times in
my code.
Is there a way to avoid this. It takes a long time to find all the unique
dates again and again.

Can i store a count
<xsl:for-each select="count(/root/rec/date[generate-id() =
generate-id(key('mydates',value)[1])])">
in a variable and use this in a loop?

Or there any other solutions ? i use xlst 1.1.

Thank you, Joeri



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