|
Subject: Re: [xsl] Global extension function From: "TP" <tpass001@xxxxxxxxxxx> Date: Mon, 24 Feb 2003 10:24:27 -0600 |
> Using extension functions to get round the fact that XSLT doesn't allow
> you to update variables is a really bad idea, save in exceptional
> circumstances (for example, it would be OK if the counter is for
> instrumenting your stylesheet, and the value of the counter doesn't
> affect the result). You are abusing the language paradigm, and this
> always leads to tears in the end. In your case, it has led to tears
> already, because as you have discovered, extension functions are not
> portable.
>
> Find out why the stylesheet is using a counter, and replace it with
> native XSLT constructs if you possibly can. The chances are that you can
> achieve the required effect simply by using position() or xsl:number.
>
> Michael Kay
I know what you are saying Michael and I agree with you. I removed the
extensions from 2 of my stylesheets.
What I want to do is change the background color of the table every 3 lines.
This is the only way that I have found to do this. If you or someone have
some ideas on how to solve this using standard xsl, I would appreciate it.
The code snippet is
==========================
<div>
<xsl:attribute name="style">background-color:<xsl:value-of
select="counter:color()"/>;color:black;margin-top: 0px;margin-left:
2px;margin-right: 2px;margin-bottom:-19px;</xsl:attribute>
==========================
<lxslt:component prefix="counter"
elements="init incr" functions="read">
<lxslt:script lang="javascript">
var count=0;
var hit=0;
function color(){
if(hit != 3){
hit=hit+1
return "white";
}
else {
if(count != 2){
count=count+1;
return "#d4e3ff";
}
count=0;
hit=0;
return "#d4e3ff";
}
}
</lxslt:script>
</lxslt:component>
==========================
Thanks.
TP.
----- Original Message -----
From: "Michael Kay" <michael.h.kay@xxxxxxxxxxxx>
To: <xsl-list@xxxxxxxxxxxxxxxxxxxxxx>
Sent: Saturday, February 22, 2003 9:12 AM
Subject: RE: [xsl] Global extension function
> Using extension functions to get round the fact that XSLT doesn't allow
> you to update variables is a really bad idea, save in exceptional
> circumstances (for example, it would be OK if the counter is for
> instrumenting your stylesheet, and the value of the counter doesn't
> affect the result). You are abusing the language paradigm, and this
> always leads to tears in the end. In your case, it has led to tears
> already, because as you have discovered, extension functions are not
> portable.
>
> Find out why the stylesheet is using a counter, and replace it with
> native XSLT constructs if you possibly can. The chances are that you can
> achieve the required effect simply by using position() or xsl:number.
>
> Michael Kay
> Software AG
> home: Michael.H.Kay@xxxxxxxxxxxx
> work: Michael.Kay@xxxxxxxxxxxxxx
>
> > -----Original Message-----
> > From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> > [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx] On Behalf Of TP
> > Sent: 21 February 2003 16:40
> > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> > Subject: [xsl] Global extension function
> >
> >
> > I currently use xalan for my transformations.
> >
> > I use 2 simple javascript functions that I have to because I
> > inherited them from <xsl:eval> days. I am planning on trying
> > other xslt processors but I cannot because I have been tied
> > down to using xalan. Looked up and found exslt, maybe this
> > can be used for my simple javascript functions.
> >
> > The code is
> > =======================
> > <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> > xmlns:lxslt="http://xml.apache.org/xslt"
> > xmlns:counter="MyCounter" extension-element-prefixes="counter"
> > version="1.0">
> > <lxslt:component elements="init incr" functions="read"
> > prefix="counter">
> > <lxslt:script lang="javascript">
> > var out=0;
> > var idi;
> >
> > function outID(){
> > var id="Out"+out;
> > idi=id;
> > out=out+1;
> > return id;
> > }
> >
> > function inID(){
> > return idi+"d";
> > }
> >
> > </lxslt:script>
> > </lxslt:component>
> > ===========================================
> >
> > Is there a quick solution to this such that I can include a
> > global kind of extension function and change processors as i
> > choose with the TRAX functionality.
> >
> > Thanks
> >
> > TP.
> >
> > XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
> >
>
>
> XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
>
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| RE: [xsl] Global extension function, Michael Kay | Thread | Re: [xsl] Global extension function, Jeni Tennison |
| RE: [xsl] Re: Can one _generate_ na, Michael Kay | Date | [xsl] Re: substring-before<tab/>..., Dimitre Novatchev |
| Month |