This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: Adding a chekbox with XSL
- To: Lewis <xsl-list at mulberrytech dot com>
- Subject: Re: Adding a chekbox with XSL
- From: Dylan Parker <dylan at mindstech dot com>
- Date: Mon, 2 Oct 2000 17:33:33 -0700
- Organization: Minds and Technologies, Inc.
- References: <39D9027F.E1F0924B@ndsapps.com>
- Reply-To: xsl-list at mulberrytech dot com
Monday, October 02, 2000, 2:47:43 PM, you wrote:
> I have an XML document that looks like this:
> <DemoMenu>
> <option strValue="Setup" textValue="Y"/>
> </ndsDemoMenu>
> If the value of DemoMenu.option.textValue == 'Y' then I want to add a
> checkbox to my page that is already checked. If the value is not == to
> 'Y' then I want it to be unchecked. Setup is the name of the checkbox.
> I've figure out how to extract and display "Setup", what I can't figure
> out is how to use xsl:if (I realize xsl:choose is really what I want but
> I wanted to simplify until I get the basics figured out) to verify the
> value of textValue. I tried:
> <xsl:if test="<xsl:value-of select="@textValue"/> =
"Y"">>
> <p align="center"><xsl:value-of select="text"/><input
> Type="Checkbox" align="center" checked="Y" value="Y"/></p>
> </xsl:if>
> trying to say
> <xsl:if test="<xsl:value-of select="@textValue"/> = "Y"">
> <p align="center"><xsl:value-of select="text"/><input
> Type="Checkbox" align="center" checked="Y" value="Y"/></p>
> </xsl:if>
You can't put elements (eg. xsl:value-of) inside of an attribute.. in this case
the test attribute of the element xsl:if.
But, don't worry! because there is an easier way to get at that value.
When you say "setup" is the "name" of the checkbox.. I will assume you mean the
text that resides beside it since that is what it appears you are trying to do.
This should work :
<p align="center">
<xsl:value-of select="strValue"/>
<xsl:if test="@textValue='Y'"> <!-- checked -->
<input type="checkbox" align="center" checked="Y" value="Y"/>
</xsl:if>
<xsl:if test="not(@textValue='Y')"> <!-- not checked -->
<input type="checkbox" align="center" value="Y"/>
</xsl:if>
</p>
I don't know if you still wanted the value of the checkbox etc to be the same in
each case.. but the general structure is there. Notice I extracted the
duplicated sections and just put them once on the outside of the xsl:if
sections. You could even reduce further by just adding an attribute named
checked="" in the case where it should be checked. But maybe that is getting
silly =)
Note.. the above DOES assume that it is being executed while within the option
node... that is, within an <xsl:apply-template select="option"> or something
similar.
You could also just use xsl:choose like this :
<p align="center">
<xsl:value-of select="strValue"/>
<xsl:choose>
<xsl:when test="@textValue='Y'"> <!-- checked -->
<input type="checkbox" align="center" checked="Y" value="Y"/>
</xsl:when>
<xsl:otherwise> <!-- not checked -->
<input type="checkbox" align="center" value="Y"/>
</xsl:otherwise>
</xsl:choose>
</p>
And although a little wordier... it does seem clearer to me what is going on.
Good luck.
Dylan Parker
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list