RE: [xsl] Dropdown

Subject: RE: [xsl] Dropdown
From: Juan Carlos Gonzalez <jcgonz@xxxxxxxxx>
Date: Tue, 22 Oct 2002 11:19:23 -0700 (PDT)
This is my template. I'm trying to generate input tags
based on the type read from the xml file.

Thanks

<xsl:template match="csd">
  <xsl:for-each select="sd[count(. | key('specs_key',
@Name)[1])=1]">
  <xsl:if test="@Type = 'DropDown'"> 
    <select name="Name">
     <option value="-">--Select Name--</option>
  </xsl:if> 
  <xsl:for-each select="key('specs_key', @Name)">
    <xsl:choose>
	<xsl:when test="@Type = 'DropDown'"> 
	  <xsl:element name="option">
	    <xsl:attribute name="value"><xsl:value-of
select="@Val"/></xsl:attribute>
	    <xsl:value-of select="@Val"/>
  	 </xsl:element>
	</xsl:when>
	<xsl:when test="@Type = 'CheckBox'"> 
	   <xsl:element name="input">
	<xsl:attribute name="type">checkbox</xsl:attribute>
	<xsl:attribute name="id"><xsl:value-of
select="@DetailId"/></xsl:attribute>
	</xsl:element>
	</xsl:when>
	<xsl:when test="@Type = 'Radio'"> 
	<xsl:element name="input">
	<xsl:attribute name="type">radio</xsl:attribute>
	<xsl:attribute name="id"><xsl:value-of
select="@DetailId"/></xsl:attribute>
	<xsl:value-of select="@Val"/>&#160;
	</xsl:element>
	</xsl:when>
	<xsl:when test="@Type = 'Free Form Text'"> 
	<xsl:value-of select="@Val"/>
	</xsl:when>
      </xsl:choose>
   </xsl:for-each>
   <xsl:if test="@Type = 'DropDown'"> 
     </select>
   </xsl:if>
</xsl:for-each>
</xsl:template>



--- "Passin, Tom" <tpassin@xxxxxxxxxxxx> wrote:
> [ Juan Carlos Gonzalez]
> > 
> > I'm trying to create a drop down list box
> dynamically,
> > but I'm getting an error message cause the
> "select"
> > tag is not being closed within the "if" tag. I
> have
> > tried replacing the < and > sign with the &lt; and
> > &gt; but it's still not working. Any ideas? 
> > 
> > <xsl:if test="some condition">
> >   <select name="cat">
> > </xsl:if>
> > 
> > ...the folowing template will create the options
> tag
> > amoung other things ...
> > 
> > <xsl:apply-templates select="cat"/>
> > 
> > <xsl:if test="some condition">
> >   </select>
> > </xsl:if>
> 
> You must complete and close the select element
> within the xsl:if
> element. Remember that the stylesheet has to be
> well-formed xml.   If
> you think that you need to do something else, you
> have not understood
> your problem thoroughly enough yet.  If you explain
> what you really wish
> to accomplish, we will be able to help you with it.
> 
> For example, if you want to create a select element,
> then you surely
> will want to create options inside it.  If you want
> to create the select
> list only if there are any cat elements, and have
> one option per cat,
> then you could write (assuming that the "cat"
> element contains the name
> of the cat as character data)
> 
> <xsl:if test='cat'> <!-- executed if there are any
> "cat" child elements
> -->
> 	<select name='cat'>
> 		<xsl:for-each select='cat'>
> 			<option value='{.}'><xsl:value-of
> select='.'/></option>
> 		</xsl:for-each>
> 	</select>
> </xsl:if>
> 
> If you specify an xsl:output method of 'html', the
> output will be in
> ordinary html (rather than in xml), and the options
> will come out
> looking like normal html options:
> 
> <option value='Mary'>Mary
> 
> You could also use apply-templates instead of the
> for-each, which might
> be better if you have more complex processing to do
> in constructing the
> options.  In this case, you would build the options
> in the template for
> "cat" rather than as shown here.
> 
> Cheers,
> 
> Tom P
> 
>  XSL-List info and archive: 
> http://www.mulberrytech.com/xsl/xsl-list
> 


__________________________________________________
Do you Yahoo!?
Y! Web Hosting - Let the expert host your web site
http://webhosting.yahoo.com/

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


Current Thread