xsl-list
[Top] [All Lists]

RE: Re: Method for delimiting template results

2003-03-05 15:34:58
Perhaps you could try:

<xsl:apply-templates select=".//input[(_at_)type='checkbox']"/> ?

-----Original Message-----
From: owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
[mailto:owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com]On Behalf Of 
Ted
Stresen-Reuter
Sent: Thursday, 6 March 2003 11:06
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: Re: [xsl] Re: Method for delimiting template results


Thanks for the reply. Upon reflection, I realized that I had the 
solution and then saw your email. However, I also realized that this 
particular solution won't work if my checkbox elements are 
inside of a 
TABLE element (and they are) because the context for the 
position() and 
last() is the enclosing TD element.

Any suggestions on how I can "globalize" the context short of 
doing two 
passes on the xml source (to reduce it to, say, just the FORM 
element)?

Ted

On Wednesday, March 5, 2003, at 03:53  PM, Dimitre Novatchev wrote:

Hi Ted,

The following transformation produces the wanted result. 
Note the use
position().

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>

  <xsl:output method="text" />
  <xsl:strip-space elements="*"/>

     <xsl:template match="/">
       array(<xsl:apply-templates/>)
     </xsl:template>

     <xsl:template match="input[(_at_)type = 'checkbox']">
       <xsl:text>"</xsl:text>
       <xsl:value-of select="@name" />
       <xsl:text>"</xsl:text>
       <xsl:if test="not(position() = last())">,</xsl:if>
     </xsl:template>

</xsl:stylesheet>

When applied on this source.xml:

<t>
  <input type="checkbox" name="first"/>
  <input type="checkbox" name="second"/>
  <input type="checkbox" name="third"/>
</t>

The result is:

       array("first","second","third")



=====
Cheers,

Dimitre Novatchev.
http://fxsl.sourceforge.net/ -- the home of FXSL


"Ted Stresen-Reuter" <tedmasterweb(_at_)mac(_dot_)com> wrote in message
news:3B94301D-4F4E-11D7-92A9-00039315D01C(_at_)mac(_dot_)com(_dot_)(_dot_)(_dot_)
Hi,

Periodically I have a need to delimit the output from a template.

In PHP I push all the variables onto an array and then "join" them 
with
a ", " into a string. Works great.

In XSLT I would start by using the following:

     <xsl:template match="/">array(<xsl:apply-templates
/>)</xsl:template>
     <xsl:template match="input[(_at_)type = 'checkbox']">"<xsl:value-of
select="@name" />"</xsl:template>

The problem here, however, is that the result would consist of:
array("fist""second""third") and what I want is:
array("first","second","third")

Any suggestions on how to do that in XSLT?

Ted


 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



 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



<Prev in Thread] Current Thread [Next in Thread>