[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: Re: Re: WML input problem

Subject: Re: Re: Re: WML input problem
From: "ashu t" <aashut@xxxxxxxxxxxxxx>
Date: 16 Jul 2002 05:26:17 -0000
wml input tag
thanks Joerg
i have written the stylesheet as you suggested but it is still producing the doubled output.
i think we should give some condition in the template match="form" that aply-templates to all but the text following <input>but how??????


the html is
<html>
<head>
<meta name="generator" content="HTML Tidy, see www.w3.org" />
<title>HELLO</title>
</head>
<body bgcolor="#C0C0C0" text="#443481" link="#0000EE">
<p>HELLO ALL</p>

<div>This is a hotel with your favourite musIc</div>

<a href="pcs1.html"> MUSIC LINK</a>

<div><font size="+1">EAST TO WEST </font></div>

<form method="POST" action="urlToInvoke">
<p>Specify your music preferences (check all that apply):</p>

<p><input type="checkbox" name="musicpref_rnb" checked="checked" />R&amp;B<br />
<input type="checkbox" name="musicpref_jazz" checked="checked" />Jazz<br />
<input type="checkbox" name="musicpref_blues" />Blues<br />
<input type="checkbox" name="musicpref_newage" />New Age</p>


<p>Choose a Category of Room:</p>

<div style="margin-left: 2em"><input type="radio" name="category" value="liv" checked="checked" /> Living<br />
<input type="radio" name="category" value="din" /> Dining<br />
<input type="radio" name="category" value="bed" /> Bedroom</div>
</form>


<br />
<br />
All Latinos have their own rhythms.Columbia has its Salsa,Argentina its Tango,and of course, <a href="pcs5.html">Brazil</a> its Samba.<br />
<br />
</body>
</html>



and the style sheet is


<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="radios" match="input[@type='radio']" use="@name"/>
<xsl:key name="checkboxes" match="input[@type='checkbox']" use="@type"/>


    <xsl:output omit-xml-declaration="yes"/>
    <xsl:template match="/">
       <wml>
         <card title="wml output">
          <xsl:apply-templates/>
         </card>
       </wml>
     </xsl:template>

<xsl:template match="head"/>

    <xsl:template match="body">
       <xsl:apply-templates/>
    </xsl:template>

<!--This is for matching div tag -->

<xsl:template match="p/div | div/div | center/div | ul/div | a/div | form/div | font/div | b/div | u/div | i/div | table/div |tr/div | td/div | tbody/div | th/div">
<xsl:apply-templates/>
</xsl:template>


<!--This is for matching div tag when it is not inside of any tag -->

    <xsl:template match="div">
      <p><xsl:apply-templates/></p>
    </xsl:template>

<!--This is for matching a tag -->

<xsl:template match="a/a | div/a | center/a | p/a | ul/a | li/a | tr/a | td/a | th/a | table/a | font/a | b/a | u/a | i/a | span/a | dl/a | dt/a | em/a | address/a">
<xsl:variable name="url">
<xsl:value-of select="@href"/>
</xsl:variable>
<a href="http://localhost/transform1.php?url={$url}">
<xsl:apply-templates/></a><br/>
</xsl:template>


<!--This is for matching a tag when it is not inside of any tag-->

<xsl:template match="a">
<p><xsl:variable name="url">
<xsl:value-of select="@href"/>
</xsl:variable>
<a href="http://localhost/transform1.php?url={$url}">
<xsl:apply-templates/></a></p>
</xsl:template>


<!--This is for matching p tag -->

<xsl:template match="p/p | div/p | center/p | ul/p | a/p | table/p | tr/p | td/p | th/p | form/p">
<xsl:apply-templates/>
</xsl:template>


<!--This is for matching p tag when it is not inside of any tag-->

    <xsl:template match="p">
      <p><xsl:apply-templates/></p>
    </xsl:template>

<!--This is for matching input tag -->

<xsl:template match="font/input | form/input | td/input | p/input | div/input | center/input | table/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='radio' and count( . | key('radios', @name)[1] ) = 1">
<select name="{@name}">
<xsl:for-each select="key('radios', @name)">
<option value="{@value}">
<xsl:value-of select="following-sibling::text()[1]"/>
</option>
</xsl:for-each>
</select>
</xsl:when>


<xsl:when test="@type='checkbox'">
<select name="{@name}" multiple="true">
<xsl:if test="@checked='checked'">
<xsl:attribute name="ivalue">1</xsl:attribute>
</xsl:if>
<option value="{@value}">
<xsl:value-of select="following-sibling::text()[1]"/>
</option>
</select>
</xsl:when>
</xsl:choose>
</xsl:template>


<!--This is for matching br tag -->

<xsl:template match="a/br | div/br | center/br | p/br | ul/br | li/br | tr/br | td/br | th/br | table/br | form/br | input/br | font/br">
<br/>
</xsl:template>


<!--This is for matching form tag -->

<xsl:template match="p/form | div/form | center/form | a/form | table/form | tr/form | td/form | th/form | select/form | ul/form | li/form">
<xsl:apply-templates select="*"/>
</xsl:template>


<!--This is for matching form tag when it is not inside of any tag -->

    <xsl:template match="form">
      <p><xsl:apply-templates select="*"/></p>
    </xsl:template>


<!--This is for matching font tag -->


<xsl:template match="p/font | center/font | div/font | ul/font | li/font | a/font | tr/font | td/font | th/font | table/font | form/font | font/font | b/font | u/font | i/font">
<xsl:apply-templates/>
</xsl:template>


<!--This is for matching font tag when it is not inside of any tag -->

         <xsl:template match="font">
             <p><xsl:apply-templates/></p>
      </xsl:template>

<!--This is for matching text which is inside body tag -->

     <xsl:template match="body/text()">
        <p><xsl:value-of select="."/></p>
      </xsl:template>

</xsl:stylesheet>


<p>is used because in wml every thing should be between <p>and</p> and one<p> can not contain another <p> so for every tag which is not inside any tag(except body ) i have put <p>and </p>(though there can be other possibilities of tags which can be parent but i have used few one just trying if that works )


when applying that stylesheet it is giving doubled output
may be there is something wrong in it or i have missed something .
can you check and suggest .
ashu




On Tue, 16 Jul 2002 Joerg Heinicke wrote :
I thought I provided the solution (despite the "new" HTML-structure) in the last mail.

At the <option> element you have to use the <xsl:value-of select="following-sibling::text()[1]"/>. But at the template matching on any kind of form, you must not use <xsl:apply-templates/> but <xsl:apply-templates select="*"/>. This should solve the problem of doubled text output.

But a comment: If the stylesheet shell work on "any" website, you will get problems I think. In your example it's written

<input/>text<br/>

while I would write

<input>text</input><br/>

So you will have to implement some logic for it.

Regards,

Joerg


_________________________________________________________
There is always a better job for you at Monsterindia.com.
Go now http://monsterindia.rediff.com/jobs


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



Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.