Subject: RE: XML transformation based on parameters
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Wed, 15 Apr 2009 10:21:32 +0100
|
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.pecis@xxxxxxxxx]
> Sent: 15 April 2009 10:16
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: Re: 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.pecis@xxxxxxxxx>:
> > Thanks Sam! I needed your XSLT1.0 version...
> >
> > e.
> >
> > 2009/4/14 Sam Byland <shbyland@xxxxxxxxxxx>:
> >> 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
|