xsl-list
[Top] [All Lists]

RE: [xsl] XML transformation based on parameters

2009-04-15 05:22:09
Since the parameters are global they can have only one value for the
duration of the transformation. You would have to rewrite the stylesheet to
use local parameters, i.e. xsl:param appearing within an xsl:template.

Michael Kay
http://www.saxonica.com/ 

-----Original Message-----
From: Emiliano Pecis [mailto:emiliano(_dot_)pecis(_at_)gmail(_dot_)com] 
Sent: 15 April 2009 10:16
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: Re: [xsl] XML transformation based on parameters

Thanks to you, I've been able to to get my xslt working.
I'd like to add a new enhancement, if it is possible.

Currently, I invoke the same xslt three or more times passing 
different parameters. I'd like to pass an XML file as 
parameter only one with all needed parameters...

I don't know how to parse the xml file inside xslt and invoke 
the transformation for each parameter...

Have you any hints/link to point me?

Following the code I have to start from... I will have 3 or 
more "p" values and 3 or more relative "v" values.


<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>

 <xsl:param name="p" select="'id'"/>
 <xsl:param name="v" select="'newvalue'"/>

 <xsl:template match="@* | node()">
  <xsl:copy>
    <xsl:apply-templates select="@* | node()"/>
  </xsl:copy>
 </xsl:template>

 <xsl:template match="*[local-name()='param']">

  <xsl:choose>
    <xsl:when test="@name = $p">
      <xsl:value-of select="$v"/>
    </xsl:when>
    <xsl:otherwise>
      <xsl:value-of select="."/>
    </xsl:otherwise>
  </xsl:choose>

 </xsl:template>
</xsl:stylesheet>

best regards,
e.


2009/4/14 Emiliano Pecis <emiliano(_dot_)pecis(_at_)gmail(_dot_)com>:
Thanks Sam! I needed your XSLT1.0 version...

e.

2009/4/14 Sam Byland <shbyland(_at_)verizon(_dot_)net>:
Emiliano,

if you're limited to XSLT1, then try matching on "param" and place 
the code associated with "@name = $p" in the template 
body.  Something like:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>

 <xsl:param name="p" select="id"/>
 <xsl:param name="v" select="newvalue"/>

 <xsl:template match="@* | node()">
  <xsl:copy>
    <xsl:apply-templates select="@* | node()"/>
  </xsl:copy>
 </xsl:template>

 <xsl:template match="param">

  <xsl:choose>
    <xsl:when test="@name = $p">
      <xsl:value-of select="$v"/>
    </xsl:when>
    <xsl:otherwise>
      <xsl:value-of select="."/>
    </xsl:otherwise>
  </xsl:choose>

 </xsl:template>

</xsl:stylesheet>

...sam


--~------------------------------------------------------------------
XSL-List info and archive:  
http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--




--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--