This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Re: WML input problem


What exactly is your problem? I tested it with this input:

<root>
<input type="checkbox" name="musicpref_rnb" checked="checked">R&amp;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&amp;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&amp;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&amp;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



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]