[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
What exactly is your problem? I tested it with this input:
<root>
<input type="checkbox" name="musicpref_rnb" checked="checked">R&B</input>
<input type="checkbox" name="musicpref_jazz" checked="checked">Jazz</input>
<input type="checkbox" name="musicpref_blues" checked="checked">Blues</input><br/>
<input type="checkbox" name="musicpref_newage" checked="checked"> New Age</input>
<input type="radio" name="category" value="liv" checked="checked">Living</input>
<input type="radio" name="category" value="din">Dining</input>
<input type="radio" name="category" value="bed">Bedroom</input>
<input type="checkbox" name="musicpref2_rnb" checked="checked">R&B</input>
<input type="checkbox" name="musicpref2_jazz" checked="checked">Jazz</input>
<input type="checkbox" name="musicpref2_blues" checked="checked">Blues</input>
<input type="checkbox" name="musicpref2_newage" checked="checked"> New Age</input>
<input type="radio" name="category2" value="liv" checked="checked">Living</input>
<input type="radio" name="category2" value="din">Dining</input>
<input type="radio" name="category2" value="bed">Bedroom</input>
</root>
with this stylesheet:
<xsl:key name="radios" match="input[@type='radio']" use="@name"/>
<xsl:key name="checkboxes" match="input[@type='checkbox']" use="substring-before(@name, '_')"/>
<xsl:template match="input">
<xsl:choose>
<xsl:when test="@type='text' or @type='password'">
<input name="{@name}" type="{@type}">
<xsl:apply-templates/>
</input>
</xsl:when>
<xsl:when test="@type='checkbox' and generate-id()=generate-id(key('checkboxes', substring-before(@name, '_')))">
<select name="{substring-before(@name, '_')}" multiple="multiple">
<xsl:for-each select="key('checkboxes', substring-before(@name, '_'))">
<option value="{substring-after(@name, '_')}">
<xsl:apply-templates/>
</option>
</xsl:for-each>
</select>
</xsl:when>
<xsl:when test="@type='radio' and generate-id()=generate-id(key('radios', @name))">
<select name="{@name}">
<xsl:for-each select="key('radios', @name)">
<option value="{@value}">
<xsl:apply-templates/>
</option>
</xsl:for-each>
</select>
</xsl:when>
</xsl:choose>
</xsl:template>
and I get this output:
For checkboxes I use the underline '_' as delimiter between the name of the select box and the value of the resulting option.
The technique I use for the grouping is called Muenchian Method. With the key 'radios' the inputs are grouped by their @name. For the *first* input in one group a select-boy shell be created. This is reached by "generate-id() = generate-id(key('radios', @name))" It's only true for the first element in a group, because generate-id() on a node set reutrns a id of the first element in this node set.
For more information look at http://www.jenitennison.com/xslt/grouping/muenchian.xml or http://www.dpawson.co.uk/xsl/sect2/N4486.html.
Regards,
Joerg
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Re: [xsl] Re: WML input problem
Subject: Re: [xsl] Re: WML input problem From: Joerg Heinicke <joerg.heinicke@xxxxxx> Date: Mon, 08 Jul 2002 22:55:16 +0200 |
What exactly is your problem? I tested it with this input:
<root>
<input type="checkbox" name="musicpref_rnb" checked="checked">R&B</input>
<input type="checkbox" name="musicpref_jazz" checked="checked">Jazz</input>
<input type="checkbox" name="musicpref_blues" checked="checked">Blues</input><br/>
<input type="checkbox" name="musicpref_newage" checked="checked"> New Age</input>
<input type="radio" name="category" value="liv" checked="checked">Living</input>
<input type="radio" name="category" value="din">Dining</input>
<input type="radio" name="category" value="bed">Bedroom</input>
<input type="checkbox" name="musicpref2_rnb" checked="checked">R&B</input>
<input type="checkbox" name="musicpref2_jazz" checked="checked">Jazz</input>
<input type="checkbox" name="musicpref2_blues" checked="checked">Blues</input>
<input type="checkbox" name="musicpref2_newage" checked="checked"> New Age</input>
<input type="radio" name="category2" value="liv" checked="checked">Living</input>
<input type="radio" name="category2" value="din">Dining</input>
<input type="radio" name="category2" value="bed">Bedroom</input>
</root>
with this stylesheet:
<xsl:key name="radios" match="input[@type='radio']" use="@name"/>
<xsl:key name="checkboxes" match="input[@type='checkbox']" use="substring-before(@name, '_')"/>
<xsl:template match="root"> <html> <head><title>test</title></head> <body> <xsl:apply-templates/> </body> </html> </xsl:template>
<xsl:template match="input">
<xsl:choose>
<xsl:when test="@type='text' or @type='password'">
<input name="{@name}" type="{@type}">
<xsl:apply-templates/>
</input>
</xsl:when>
<xsl:when test="@type='checkbox' and generate-id()=generate-id(key('checkboxes', substring-before(@name, '_')))">
<select name="{substring-before(@name, '_')}" multiple="multiple">
<xsl:for-each select="key('checkboxes', substring-before(@name, '_'))">
<option value="{substring-after(@name, '_')}">
<xsl:apply-templates/>
</option>
</xsl:for-each>
</select>
</xsl:when>
<xsl:when test="@type='radio' and generate-id()=generate-id(key('radios', @name))">
<select name="{@name}">
<xsl:for-each select="key('radios', @name)">
<option value="{@value}">
<xsl:apply-templates/>
</option>
</xsl:for-each>
</select>
</xsl:when>
</xsl:choose>
</xsl:template>
and I get this output:
<html> <head> <META http-equiv="Content-Type" content="text/html; charset=UTF-16"> <title>test</title> </head> <body> <select name="musicpref" multiple> <option value="rnb">R&B</option> <option value="jazz">Jazz</option> <option value="blues">Blues</option> <option value="newage"> New Age</option> </select> <select name="category"> <option value="liv">Living</option> <option value="din">Dining</option> <option value="bed">Bedroom</option> </select> <select name="musicpref2" multiple> <option value="rnb">R&B</option> <option value="jazz">Jazz</option> <option value="blues">Blues</option> <option value="newage"> New Age</option> </select> <select name="category2"> <option value="liv">Living</option> <option value="din">Dining</option> <option value="bed">Bedroom</option> </select> </body> </html>
For checkboxes I use the underline '_' as delimiter between the name of the select box and the value of the resulting option.
The technique I use for the grouping is called Muenchian Method. With the key 'radios' the inputs are grouped by their @name. For the *first* input in one group a select-boy shell be created. This is reached by "generate-id() = generate-id(key('radios', @name))" It's only true for the first element in a group, because generate-id() on a node set reutrns a id of the first element in this node set.
For more information look at http://www.jenitennison.com/xslt/grouping/muenchian.xml or http://www.dpawson.co.uk/xsl/sect2/N4486.html.
Regards,
Joerg
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: Re: [xsl] Re: WML input problem, ashu t | Thread | [xsl] questions regd namespaces, subbu |
Re: [xsl] find and replace in javas, Jeni Tennison | Date | Re: [xsl] grouping after filtering , Joerg Heinicke |
Month |