[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

RE: [xsl] Use XSL:Variable


Subject: RE: [xsl] Use XSL:Variable
From: "Jim Neff" <jneff@xxxxxxxxxxxxxxx>
Date: Tue, 1 Feb 2005 10:27:03 -0500

I'll preface this with the disclaimer that I'm new to XSLT too... ;-)

You can put the variable declaration before you first template match.


For example (where claim_file is the root node in the source XML document) :

<xsl:stylesheet
	version="2.0"
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
	xmlns:xs="http://www.w3.org/2001/XMLSchema"
	xmlns:saxon="http://saxon.sf.net/">

	<xsl:output method="text" />

	<xsl:variable name="my_nice_variable">

		"put variable contents here"

	</xsl:variable>

	<xsl:template match="claim_file">

		foo code here

	</xsl:template>

</xsl:stylesheet>



This would be a global variable.  Something I had trouble adjusting to in
XSLT is that variables cannot change contents once they are created.  So if
you put something in a global scope variable, its contents cannot change
throughout the life of the stylsheet.

If you put a variable within a template scope, the variable gets destroyed
and created each time that template is used.

Something else cool that I do a lot with variables with global scope is if
you are needing to massage your data bit before using it, you can do that in
a variable before the first template match is used.  This is helpful if you
need to restrucutre your data (this also might make your Xpath statements
easier to read and debug).

Does that make the waters clear as mud?

--Jim Neff




> -----Original Message-----
> From: Paulo Mendes Pinto [mailto:paulo.pinto@xxxxxxx]
> Sent: Tuesday, February 01, 2005 10:23 AM
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: RE: [xsl] Use XSL:Variable
>
> Obrigado Antsnio.
>
> Something I've learn from you response: I have to define my
> variable in / and not in template.
>
> If someone can post here examples of use of variable defined
> as global, assign in one template and  used in another, that
> will be nice.
>
> Tkx in avance
>
> Realmente ter tugas nestas listas i sempre interessante.... um abrago
>
> PMP
>
> > -----Original Message-----
> > From: Antsnio Mota [mailto:amsmota@xxxxxxxxx]
> > Sent: terga-feira, 1 de Fevereiro de 2005 15:16
> > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> > Subject: Re: [xsl] Use XSL:Variable
> >
> > Ora viva, i sempre bom encontrar um compatriota :)
> >
> > I'm not one of the lists experts, there are many people here who
> > really excels in this area, making this one of the most
> useful lists
> > i've seen. But i can point some obvious things.
> >
> > First, there are no "tags" in XSL, XSL works on "nodes" not
> on "tags".
> > So you work by selecting nodes, apllying temnplates on then, etc...
> >
> > Second your var
> >
> > >      <xsl:template match="ObjectFormat">
> > >           <xsl:variable name="FileExtention"><xsl:value-of
> > select="@FileExtention"/></xsl:variable>
> > >      </xsl:template>
> > >
> >
> > exist only inside the template where you define it, so you
> can't use
> > it anywhere else. You'll have to define it  at the root
> level you want
> > it to be global. But it's not clear what you're trying to do, you
> > should post more info, along with examples of your XML .
> That template
> > like it is does nothing...
> >
> > Fica bem...
> >
> >
> >
> >
> > On Tue, 1 Feb 2005 15:04:24 -0000, Paulo Mendes Pinto
> > <paulo.pinto@xxxxxxx> wrote:
> > > Hello
> > >
> > > I'm new at this List and new in XSL and I have many problems
> > > understanding how
> > to do something.
> > >
> > > I have a XML that I want to transform to in a CSV text file to
> > > import to Excel. Until
> > now I have the text file like I want with the char set that
> I want but
> > there is something that I want and I don't know how.
> > >
> > > In my XML I have a CONTROL tag with some information that
> I will use
> > > in the other
> > tags. Some of the tags in CONTROL tag will concatenate with
> some tags
> > along the rest the XML.
> > >
> > > I have to get some data from the CONTROL tag and save it in a
> > > variable and use to
> > concatenate with fields is another tag.
> > >
> > > How can I do that? I was trying to do like this.
> > >
> > >      <xsl:template match="CONTROL">
> > >           <xsl:apply-templates/>
> > >      </xsl:template>
> > >
> > >      <xsl:template match="ObjectFormat">
> > >           <xsl:variable name="FileExtention"><xsl:value-of
> > select="@FileExtention"/></xsl:variable>
> > >      </xsl:template>
> > >
> > > The FileExtention is an Attribute of Object Format tag in CONTROL.
> > >
> > > <xsl:template match="ObjectIndex">
> > >      <xsl:value-of select="@Code"/><xsl:text>;</xsl:text>
> > >      <xsl:value-of select="@Description"/><xsl:text>;</xsl:text>
> > >      <xsl:copy-of select="$FileExtention" /><xsl:text>|</xsl:text>
> > >      <xsl:text>&#xD;&#xA;</xsl:text> </xsl:template>
> > >
> > > With this XSL I get an error:
> > > Invalid variable referenceError in XPath expression. Invalid
> > > variable reference
> > >
> > > How can I use this variable?
> > >
> > > Tkx in advance
> > >
> > > Paulo Aboim Pinto
> > > Engenheiro de Produto
> > > ======================
> > > DSTS - Desenvolvimento e Integragco de Servigos e Tecnologia, S.A.
> > > Tel.(+351)21 092 56 28
> > > Fax.(+351)21 092 56 29


Current Thread
Keywords