xsl-list
[Top] [All Lists]

Re: grouping by x number of elements

2005-07-12 13:52:56

beware the T-word. XSLT has no access to the tags in the source document
and can not generate tags in the result.

You want to generate a Worksheet node every 65,535 records so that's
something like
<xsl:for-each select="record[position() mod 65535 = 1]">
  <Worksheet ss:name="{$WORKSHEET}">


The problem here is that there has to be a closing worksheet tag,

As I said, XSLT doesn't work with tags.

so i have to process all the rows recursively, 

You could do, or you could most likely use the simpler method of
processing n records at a time (for n = 65535 or 500 or whatever you
need) that I show above.

                                <xsl:value-of select="substring($FILE, 1, 
string-length($FILE) -4)">
                                </xsl:value-of>

value of has to be empty.


        <xsl:template match="record" mode="item">
                <xsl:param name="remaining" select="$GROUPSIZE - 1"/>
                <Row>
                <xsl:for-each select="*">
                        <xsl:call-template name="cell"/>
                </xsl:for-each>
                </Row>
                <xsl:if test="$remaining">
                        <xsl:apply-templates 
select="following-sibling::record[1]" mode="item" >
                        <xsl:with-param name="remaining" select="$remaining -1" 
/>
                        </xsl:apply-templates>
                </xsl:if>
  </xsl:template>


This appears to be processing $GROUPSIZE siblings at a time, if so there
is no need to use recursion here (processors will not be optimised to
recurse that deeply, most likely) you can just do
<xsl:apply-templates
select="following-sibling::record[position()&lt;$GROUPSIZE]
no need to explictly recurse.

                <xsl:if test='number(.)'>
                <xsl:if test="not(number(.))">

testing for zzz and not(zzz) is always equivalent to an axsl:choose with
a single test and an otherwise. In this case I don't think you want to
test number(.) as that will first coerce the current node to being a
number, and then be true if that number is non-zero. Perhaps that is
what you want but I suspect that you want to test
test="number(.)=number(.)"
which is true if the content coerces to a number that is not NotANumber.


David

________________________________________________________________________
This e-mail has been scanned for all viruses by Star. The
service is powered by MessageLabs. For more information on a proactive
anti-virus service working around the clock, around the globe, visit:
http://www.star.net.uk
________________________________________________________________________

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