Subject: RE: [xsl] Problem with position( ) function From: "Jaime A Stuardo Bahamondes" <jstuardo@xxxxxxxxxxx> Date: Mon, 1 Dec 2003 10:29:29 -0400 |
Thanks.. but the problem I have is that condition "position() < last()" doesn't work because position() gets the position of the last node in the XML, and not of the last node with the same agr_id. I need that the last comma not to be added to the string. To solve it I have thought about adding a 0 after the call to the template and it worked. Thanks anyway Jaime > -----Mensaje original----- > De: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx > [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx]En nombre de Manolis > Mavrikis > Enviado el: Jueves, 27 de Noviembre de 2003 23:29 > Para: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Asunto: Re: [xsl] Problem with position( ) function > > > I am not sure what you are trying to do as your JavaScript > and what you > are showing the xslt to generate seems different but I assume > you want to > haver these ACT_DES_COR data there but then your foramt seems very > complicated. > > Anyway this is not the issue and maybe you don't want/can't > change it but > still I think you over-complicated the matter a lot. Unless > you are trying > to do as well with the template <xsl:template > match="actividades/ROWSET/ROW"> then I think that (assuming > that this is > waht you want to do) you just have to call a template when > you want to > construct the array: > > Array(<xsl:call-templates > select="actividades-indexing"><xsl:with-param > name="agr_id" select="AGR_ID" /></xsl:call-template>) > > > <xsl:template name="actividades-indexing"> > <xsl:param name="agr_id" /> > <xsl:for-each select="/yourroot/actividates/ROWSET/ROW[ACT_AGR_ID = > $agr_id]]]/"/> > '<xsl:value-of select="position()"/>|<xsl:value-of > select="ACT_DES_COR" />' > <xsl:if test = "position() < last()">,</xsl:if> > </xsl:fot-each> > </xsl:template> > > I am sorry I cannot test it at the moment but it seems > consistent with > what you want to do. > > Manolis > > p.s. btw I don't know what you want to do with these data assigned in > the Arrays but in a similiar case I used JavaScript > 'hashmaps' to assign things > into and then when I needed to call them i just refered to them with > their id > > > On Thu, 27 Nov 2003, Jaime A Stuardo Bahamondes wrote: > > Hi all.. > > I have this piece of XML: > > <actividades> > <ROWSET> > <ROW id="1"> > <ACT_ID>6</ACT_ID> > <ACT_FEC_ING>27-11-2003 09:43:32</ACT_FEC_ING> > <ACT_DES_LAR>Finanzas, Impuestos y Política > Monetaria</ACT_DES_LAR> > <ACT_DES_COR>Finanzas, Impuestos y Política > Monetaria</ACT_DES_COR> > <ACT_EST>v</ACT_EST> > <ACT_AGR_ID>1</ACT_AGR_ID> > </ROW> > <ROW id="2"> > <ACT_ID>1</ACT_ID> > <ACT_FEC_ING>27-11-2003 09:43:31</ACT_FEC_ING> > <ACT_DES_LAR>Gobierno en General, > Municipalidades</ACT_DES_LAR> > <ACT_DES_COR>Gobierno en General, > Municipalidades</ACT_DES_COR> > <ACT_EST>v</ACT_EST> > <ACT_AGR_ID>1</ACT_AGR_ID> > </ROW> > -......--- > </actividades> > <agrupaciones> > <ROWSET> > <ROW id="1"> > <AGR_ID>1</AGR_ID> > <AGR_FEC_ING>11-11-2003</AGR_FEC_ING> > <AGR_FEC_MOD>14-11-2003 11:22:04</AGR_FEC_MOD> > <AGR_DES_LAR>Administración Publica</AGR_DES_LAR> > <AGR_DES_COR>Administración Publica</AGR_DES_COR> > <AGR_EST>v</AGR_EST> > </ROW> > <ROW id="2"> > <AGR_ID>2</AGR_ID> > <AGR_FEC_ING>18-11-2003 11:34:08</AGR_FEC_ING> > <AGR_DES_LAR>Agricultura</AGR_DES_LAR> > <AGR_DES_COR>Agricultura</AGR_DES_COR> > <AGR_EST>v</AGR_EST> > </ROW> > </agrupaciones> > > > I'm programming an XSL that generates a JavaScript this way: > > var actividades = new Array(2); // 2 "agrupaciones" > actividades[0] = new Array(6, 1); // 6 and 1 are > "actividades" corresponding to "agr_id" = 1 > actividades[1] = new Array(7,9,15); // 7, 9 and 15 > are "actividades" corresponding to "agr_id" = 2 (not shown in > XML above) > and so on. > > I programmed this XSL: > > <xsl:template match="agrupaciones/ROWSET/ROW"> > actividades[<xsl:value-of select="position()-1"/>] = > new Array(<xsl:apply-templates > select="../../../actividades/ROWSET/ROW"><xsl:with-param > name="agr_id"><xsl:value-of select="AGR_ID" > /></xsl:with-param></xsl:apply-templates>) > </xsl:template> > > <xsl:template match="actividades/ROWSET/ROW"> > <xsl:param name="agr_id" /> > <xsl:if test="ACT_AGR_ID = $agr_id">'<xsl:value-of > select="position()" />|<xsl:value-of select="ACT_DES_COR" > />'<xsl:if test = "position() < last() ">,</xsl:if></xsl:if> > > </xsl:template> > > The problem I have is that the following is generated > by those templates: > > actividades[0] = new Array(6,1,); // > realize about the last "comma" > actividades[1] = new Array(7,9,15,); > > To avoid that, I placed the condition position() < > last(), but I realized that position( ) isn't resetted by > each iteration of the template. Any help on this? > > And other question. I have placed all the xsl > instructions on the same line because if I write the xsl more > readable, empty lines are inserted in the generated > JavaScript. Is it possible to solve it? > > Thanks in advance > Jaime > > 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 -> |
---|---|---|
[xsl] Small Problem, puja thakral | Thread | Re: [xsl] Problem with position( ) , David Carlisle |
Re: [xsl] Passing XML data to HTML , David Carlisle | Date | Re: [xsl] Passing XML data to HTML , JCS |
Month |