This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: AW: An easy problem
- From: "alex ek" <alexek at rediffmail dot com>
- To: xsl-list at lists dot mulberrytech dot com
- Date: 29 Jul 2002 10:28:49 -0000
- Subject: Re: AW: [xsl] An easy problem
- Reply-to: xsl-list at lists dot mulberrytech dot com
Thanks thomas
I tried that .i would not say that it is not working but there
is some thing which is not correct but i am not getting what?
The style sheet i am using is
<xsl:template match="form">
<do type="accept" label="submit">
<go href="{@action}" method="{@method}">
<xsl:choose>
<xsl:when test="input[@type='text'] or
input[@type='password'] or input[@type='checkbox']">
<postfield name="{@name}"
value="{concat('$',@name)}"/>
</xsl:when>
<xsl:when test="input[@type='radio']">
<xsl:for-each
select="//input[generate-id(.)=generate-id(key('radios',
@name))]">
<postfield name="{@name}"
value="{concat('$',@name)}"/>
</xsl:for-each>
</xsl:when>
</xsl:choose>
</go>
</do>
<xsl:apply-templates select="*"/>
</xsl:template>
i tried your style sheet but it was processing the input types
twice as i have written template match style sheet for input type
separately. like
<xsl:template match="input[@type='text']">
<input name="{@name}" type="{@type}">
<xsl:apply-templates/>
</input>
<xsl:template match="input[@type='password']">
<input name="{@name}" type="{@type}">
<xsl:apply-templates/>
</input>
<xsl:template match="input[@type='']">
<input name="{@name}" type="text">
<xsl:apply-templates/>
</input>
<xsl template match="input[@type='radio'] and count( . |
key('radiobutton', @name)[1] ) = 1">
<select name="{@name}">
<xsl:for-each select="key('radiobutton', @name)">
<option>
<xsl:value-of select="following- sibling::text()[1]"/>
</option>
</xsl:for-each>
</select>
<xsl:template match="input[@type='checkbox']">
<select name="{@name}" >
<option value="{@value}">
<xsl:value-of select="following-sibling::text()[1]"/>
</option>
</select>
</xsl:template>
So now the output i am getting is
<do type="accept" label="submit">
<go href="choice.html" method="post">
<postfield name="gender" value="$gender"/>
</go>
</do> input your name: <input name="name" type="text"/><br/>
input password :<input name="pwd" type="password"/>
Enter the choices<select name="name1">
<option value="">America</option>
</select><br/>
<select name="name2"><option value="">Europe</option>
</select><br/>
<select name="name3"><option value="">Asia </option>
</select>
Enter the gender
<select name="gender">
<option value="mal">male</option>
<option value="fem"> female</option>
</select>
Where as what it should be like
input your name:
<input name="name" type="text"/>
<br/>
input password :
<input name="pwd" type="password"/>
Enter the choices
<select name="name1">
<option value="">
America
</option>
</select>
<br/>
<select name="name2">
<option value="">
Europe
</option>
</select>
<br/>
<select name="name3">
<option value="">
Asia
</option>
</select>
Enter the gender
<select name="gender">
<option value="mal">
male
</option>
<option value="fem">
female
</option>
</select>
<br/>
<do label="submit" type="accept">
<go href="choice.html" method="post">
<postfield name="name" value="$name"/>
<postfield name="pwd" value="$pwd"/>
<postfield name="name1" value="$name1"/>
<postfield name="name2" value="$name2"/>
<postfield name="name3" value="$name3"/>
<postfield name="gender" value="$gender"/>
</go>
</do>
and are these two same
<xsl:for-each
select="//input[generate-id(.)=generate-id(key('radios',
@name))]">
<xsl:for-each select="@type='radio' and count( . |
key('radiobutton', @name)[1] ) = 1">
And now the question
What is the problem .
alexek
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:key name="radios" match="//input[@type='radio']"
use="@name"/>
<xsl:template match="form">
<do type="accept" label="submit">
<go href="{@action}" method="{@method}">
<xsl:apply-templates
select=".//input[@type='checkbox']"/>
<xsl:for-each
select="//input[generate-id(.)=generate-id(key('radios',
@name))]">
<postfield name="{@name}"
value="{concat('$',@name)}"/>
</xsl:for-each>
</go>
</do>
<xsl:apply-templates select="*"/>
</xsl:template>
<xsl:template match="input[@type='checkbox']">
<postfield name="{@name}" value="{concat('$',@name)}"/>
</xsl:template>
</xsl:stylesheet>
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list