Subject: Re: [xsl] Looking for a concise way of specifying an conditional attribute in output From: John McGowan <john@xxxxxxxxxxxxx> Date: Thu, 5 May 2011 15:47:51 -0500 |
I agree Brandon, It's easy to forget about those other instructions when value-of does 95% of what you need to do, and its name, "value-of" doesn't necessarily imply the limitations that it has. /John On Thu, May 5, 2011 at 3:27 PM, Brandon Ibach <brandon.ibach@xxxxxxxxxxxxxxxxxxx> wrote: > On this note, it seems to me that xsl:value-of is one of the most > misunderstood instructions for novices. For that matter, even more > experienced users seem to use it in places where xsl:apply-templates, > xsl:copy-of or, in XSLT 2.0, xsl:sequence might be better choices. > > I'd kind of like to see XSLT provide an alternative in the form of > allowing the "select" attribute on xsl:text with the same effect as on > xsl:value-of. This would be a) slightly more concise, b) in line with > other node-type instructions, such as xsl:attribute, and c) more > descriptive (IMHO) of the result, in that "text" suggests that the > result will be a string, rather than the more ambiguous "value". I > dare say XSLT might even consider deprecating xsl:value-of in favor of > this, for the relatively few (compared to how often it seems to be > used, today) cases where this particular functionality is needed. > > -Brandon :) > > > On Thu, May 5, 2011 at 4:06 PM, John McGowan <john@xxxxxxxxxxxxx> wrote: >> Thank you Andrew, Michael and Ken! >> >> I use value-of so much I forgot about it's impact on "non-strings". >> This information also helped me with a very similar issue I just ran >> into today where I was writing a function that was returning a boolean >> true or false, but it was always true... because value-of was turning >> it into a string. >> >> /John >> >> On Thu, May 5, 2011 at 3:25 AM, Andrew Welch <andrew.j.welch@xxxxxxxxx> wrote: >>>> <option value="{@value}> >>>> <xsl:value-of select="isSelected(@value,something)"> >>>> other stuff >>>> </option> >>>> >>>> with a reusable function like this >>>> >>>> <xsl:function name="isSelected"> >>>> <xsl:param name="v1"/> >>>> <xsl:param name="v2"/> >>>> <xsl:if test="$v1 eq $v2"><xsl:attribute name="selected" >>>> select="'selected'" /></xsl:if> >>>> </xsl:function> >>>> >>> >>> As has been said you need xsl:sequence or xsl:copy-of to get the whole >>> node not just the value of the node, but you could also make that >>> function a little more generic to create any attribute: >>> >>> <xsl:function name="f:createAtt"> >>> <xsl:param name="name"/> >>> <xsl:param name="value"/> >>> <xsl:attribute name="{$name}" select="$value"/> >>> </xsl:function> >>> >>> and then call it passing the the name value pair for the attribute, >>> and put the condition in a predicate: >>> >>> <foo> >>> <xsl:sequence select="f:createAtt('foo', 'bar')[current()/@value = >>> $something]"/> >>> >>> >>> cheers >>> andrew >>> >>> >>> >>> -- >>> Andrew Welch >>> http://andrewjwelch.com >>> >>> >> >> >> >> -- >> /John > > -- /John
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Looking for a concise way, Brandon Ibach | Thread | Re: [xsl] Looking for a concise way, Michael Kay |
Re: [xsl] Looking for a concise way, Brandon Ibach | Date | Re: [xsl] Looking for a concise way, Michael Kay |
Month |