Re: [xep-support] "Filtered" Select and alternating background-color

From: Martin Snajdr|AMAN <martin.snajdr@aman.de>
Date: Fri May 26 2006 - 01:35:19 PDT

Hi all,

JFYI I took Volodymyr Mykhailyk's solution, because it is some few
1/100's-seconds faster than Dan Ochs's... and it works really fine...

Thanks to all!

Mit freundlichen Grüßen

Martin Snajdr

-------------------------------------------------------------
Jugendtalentförderung by AMAN Media - der AMAN Cup 2006
mehr dazu unter http://www.t-a-f-i.de/
-------------------------------------------------------------

-->> mailto:Martin.Snajdr@aman.de

Martin Snajdr
AMAN Media GmbH
network & media
Dorfstrasse 2-4
85235 Unterumbach
Germany
fon: ++49-(0)8134-9100
fax: ++49-(0)8134-9110
technical support:
mailto:admin@aman.de
http://www.aman.de <http://www.aman.de/>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Diese eMail enthält vertrauliche und/oder rechtlich geschützte
Informationen. Das unerlaubte Kopieren sowie die unbefugte
Weitergabe/Weiterleitung dieser Mail ist nicht gestattet. Wenn Sie nicht
der richtige Adressat sind oder diese eMail irrtümlich erhalten haben,
informieren Sie bitte sofort den Absender und vernichten Sie diese Mail.

This e-mail may contain confidential and/or privileged information. Any
unauthorized copying, disclosure or distribution/forwarding of the
material in this email is strictly forbidden.

Volodymyr Mykhailyk schrieb:
> Hi,
> as for me, the most easier way to fix this:
> It will not cause any performance issues and possible failures with big
> variables or recursions.
> <fo:table-body>
> <xsl:apply-templates select="article[1]" mode="someMode">
> <xsl:with-param name="count" select="1"/>
> </xsl:apply-templates>
> <fo:table-body/>
>
> <xsl:template match="article" mode="someMode">
> <xsl:param name="count"/>
> <xsl:choose>
> <xsl:when test="all_condition_that_you_have">
> <fo:table-row page-break-inside="avoid">
> <xsl:if test="($count mod 2) = 0">
> <xsl:attribute
> name="background-color">some_color</xsl:attribute>
> </xsl:if>
> [...]
> </fo:table-row>
> <xsl:apply-templates select="following-sibling::article[1]"
> mode="someMode">
> <xsl:with-param name="count" select="$count+1"/>
> </xsl:apply-templates>
> </xsl:when>
> <xsl:otherwise>
> <xsl:apply-templates select="following-sibling::article[1]"
> mode="someMode">
> <xsl:with-param name="count" select="$count"/>
> </xsl:apply-templates>
> </xsl:otherwise>
> </xsl:choose>
> </xsl:template>
> In other word: it process articles one after another, and if conditions
> are true it give another template parameter count increased by one point.
> "someMode" in apply-templates used in case if you have special
> processing of article in another place.
> --BS
> Powell, Todd wrote:
>> Hi Martin,
>>
>> Personally, I see "recursion solutions" as a kind of a workaround for
>> one of XSLT's shortcomings -- namely no traditional variables -- and
>> they make it difficult to understand what's going on in the script (if
>> not for the original developer, then for any subsequent support staff
>> trying to take over maintenance).
>>
>> AND, if you ARE talking about a really huge table, and it causes your
>> transformation "to exlode" (nice imagery Geoff :-), then you can't use
>> it at all.
>>
>> I'd suggest two alternatives:
>>
>> 1) If you are using a parser that supports javascript scripting as
>> callable functions from the XSL (Microsoft's is one), you could create a
>> "global" javascript variable that truly does get incremented during each
>> table row output, and whose value can be queried to determine odd/even;
>> or
>>
>> 2) Split your XSLT process into two distinct passes: one which
>> sorts/filters/etc. the data into the desired order, and another which
>> operates on the result of the first and simply looks at the (position()
>> mod 2) to determine odd/even.
>>
>> Each of these options have their downsides, and may prove undoable for
>> your situation, but I think they are more straightforward in their logic
>> than the recursive approach.
>>
>> Hope this helps!
>>
>> Regards,
>> Todd
>>
>> ================================
>> Todd S. Powell
>> Project Performance Corporation
>> Principal Analyst
>> U.S. Department of Energy
>> ================================
>>
>>
>>> David Pirkle schrieb:
>>>
>>>> You could try moving the body of your loop into a recursive template,
>>>> and then replace the for-each with a call to the template. That
>>>> would allow you to have a variable that increments for each element
>>>> that passes the filter, and you could use the modulus test on that.
>>>>
>>>> -----Original Message-----
>>>> Martin Snajdr|AMAN
>>>> Sent: Tuesday, May 23, 2006 1:16 AM
>>>> To: xep-support@renderx.com
>>>> Subject: [xep-support] "Filtered" Select and alternating
>>>> background-color
>>>>
>>>> Hi there,
>>>>
>>>> i have a problem with a real huge table, which has to have
>>>> alternating background-color in each table-row.
>>>> As you can see in the following excerpt, i have to use a xsl:if to
>>>> filter the select. But doing it this way prevents the
>>>> position()-thing from working right, when the filter is active.
>>>>
>>>> [..]
>>>> <fo:table-body>
>>>> <xsl:for-each select="article">
>>>> <xsl:if test="(($filter_material='all') or
>>>>
>> ($filter_material!='all'
>>
>>>> and
>>>> @color=$filter_material))
>>>> and (($filter_knaggen='all') or
>>>>
>> ($filter_knaggen!='all' and
>>
>>>> contains(./attributevalue[@attid=$filter_knaggen_attrid]/value[@lang=
>>>> '
>>>> de'],$filter_knaggen)
>>>> ))
>>>> and (($filter_nenngroesse='all') or
>>>>
>> ($filter_nenngroesse!='all'
>>
>>>> and
>>>>
>>>>
>> contains(./attributevalue[@attid=$filter_nenngroesse_attrid]/value[@la
>>
>>>> ng='de'],$filter_nenngroesse)
>>>> ))
>>>> and (($filter_eingang='all') or
>>>>
>> ($filter_eingang!='all' and
>>
>> contains(./attributevalue[@attid=$filter_eingang_attrid]/value[@lang='
>>
>>>> de'],$filter_eingang)
>>>> ))
>>>> ">
>>>> <fo:table-row page-break-inside="avoid">
>>>> <xsl:attribute name="background-color"><xsl:if test="position()
>>>>
>> mod
>>
>>>> 2=0">rgb-icc(255,255,255,#CMYK,0,0,0,0)</xsl:if><xsl:if
>>>> test="position() mod 2 != 0">rgb-icc(227, 231,
>>>> 241,#CMYK,0.1,0.045,0,0.05)</xsl:if></xsl:attribute>
>>>> [..]
>>>>
>>>>
>>>> I tried to change the select to do the filtering, but since the
>>>> filter depends on passed-in params i'm not able to do this. I tried
>>>> some exslt node-set-stuff, but i didn't get to it.
>>>>
>>>> Anyone any idea?
>>>>
>>
>>
>> -------------------
>> (*) To unsubscribe, send a message with words 'unsubscribe xep-support'
>> in the body of the message to majordomo@renderx.com from the address
>> you are subscribed from.
>> (*) By using the Service, you expressly agree to these Terms of Service http://www.renderx.com/terms-of-service.html
>>
>>
>
> ------------------- (*) To unsubscribe, send a message with words
> 'unsubscribe xep-support' in the body of the message to
> majordomo@renderx.com from the address you are subscribed from. (*) By
> using the Service, you expressly agree to these Terms of Service
> http://www.renderx.com/terms-of-service.html

-------------------
(*) To unsubscribe, send a message with words 'unsubscribe xep-support'
in the body of the message to majordomo@renderx.com from the address
you are subscribed from.
(*) By using the Service, you expressly agree to these Terms of Service http://www.renderx.com/terms-of-service.html
Received on Fri May 26 02:12:39 2006

This archive was generated by hypermail 2.1.8 : Fri May 26 2006 - 02:12:40 PDT