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: Tag Replacement


It's much easier to do this with templates than to use for-each:

<xsl:template match="/">
  <vxml version="1.0" application="your-app-root.vxml">
    <xsl:apply-templates/>
  </vxml>
</xsl:template>

<xsl:template match="card">
  <form id="{@id}">
    <field name="youNeedToHaveANameForYourFieldsToBeValidVXML"> <!-- :) -->
      <prompt>
        <xsl:apply-templates/>
      </prompt>
    </field>
  </form>
</xsl:template>

<xsl:template match="a">
  <!-- special handling for anchors.  Unless you explicitely define a 
template for something, it's text will be output (so the text in the <p> and 
<strong> will still be output, even though there is no template matching "p" 
and "strong") -->
  <voice gender="female">
    <xsl:apply-templates/>
  </voice>
</xsl:template>


Using xsl:apply-templates does basically the same thing as your for-each, but 
it allows you to specify a different template for each node.  The default 
template, which is used if you don't have one that matches a node, is similar 
to what you have already, which is basically to do <value-of select="."/>.  
Each time xsl:apply-templates is used, it basically does a for-each on each 
of the child nodes of the current node, and for each node it finds a template 
that matches that node and outputs the contents of the template.

If you still want to use xsl:for-each (though I don't recommend it in almost 
all cases; templates are much simpler once you get the hang of them), you 
could replace your inner for-each with:

<xsl:for-each select="*">
  <xsl:choose>
    <xsl:when test="self::a">
      <voice gender="female">
        <xsl:value-of select="."/>
      </voice>
    </xsl:when>
    <xsl:otherwise>
      <xsl:value-of select="."/>
    </xsl:otherwise>
  </xsl:choose>
</xsl:for-each>

Once you get the hang of templates, though, you won't want to go back except 
in relatively rare cases.

On Thursday 14 February 2002 15:43, Greg Gerou wrote:
> Hi,
> I'm attempting to use XSL to do the following:
>
> Input document:
>
> <?xml version="1.0"?>
> <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
> "http://www.wapforum.org/DTD/wml_1.1.xml";>
> <wml>
> 	<card id="welcome" title="Welcome">
> 		<p><strong>Welcome to this WAP page!</strong></p>
> 		<a href="products.wml">Products</a>
> 		<p><a href="links.wml"><small>Links</small></a></p>
> 	</card>
> </wml>
>
> Output document:
>
> <?xml version="1.0" encoding="UTF-8"?>
> <vxml>
> 	<form id="welcome">
> 		<field>
> 			<prompt>Welcome to this WAP page!
> 			<voice gender="female">Products</voice>
> 			<voice gender="female">Links</voice></prompt>
> 		</field>
> 	</form>
> </vxml>
>
> In other words, I'm attempting to strip all the displayed text from the
> original document and display it in the transformed document, but each
> anchor tag ("<a...") is replaced by a <voice> tag. The following XSL will
> do all this, except handle the anchor cases (it will ouput the above
> "output document" without the voice tags):
>
> <?xml version="1.0" encoding="UTF-8"?>
> <xsl:stylesheet version="1.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
> 	<xsl:output method="xml" version="1.0" encoding="UTF-8"
> indent="yes"/>
> 	<xsl:template match="/">
> 		<vxml version="1.0">
> 			<xsl:for-each select="*/card">
> 				<form id="{@id}">
> 					<field>
> 					<xsl:for-each select="*">
>
> 						<xsl:value-of select="."/>
> 					</xsl:for-each>
> 					</field>
> 				</form>
> 			</xsl:for-each>
> 		</vxml>
> 	</xsl:template>
> 	</xsl:template>
> </xsl:stylesheet>
>
> What changes are necessary to get it to work in the desired fashion? Thanks
> in advance!
>
> Greg Gerou
> ggerou@sandcherry.com
>
>
>
>  XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list

-- 
Peter Davis
algorithm, n.:
	Trendy dance for hip programmers.

 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]