Re: [xsl] trying to set a parameter equal to an elements attribute

Subject: Re: [xsl] trying to set a parameter equal to an elements attribute
From: "Noel Golding" <noel@xxxxxxxxxxxxxxx>
Date: Wed, 21 Aug 2002 17:57:19 -0400
here is a more complete example of what I was trying to accomplish, my
previous fragment was very error ridden.  sorry I hope this is a litte
better.



<!--xml file -->
<?xml version="1.0"?>
<root>
 <article>
  <title>Investment Science</title>

  <section name="executive summary">
   <title>Executive Summary</title>
   <para>
    Some Text goes here
   </para>
  </section>
 </article>

 <header volume="8" issuedate="August 19, 2002" number="28" link="08192002"
/>
</root>


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

<xsl:output method="html"/>

<xsl:template match="root">
 <xsl:param name="page"><xsl:value-of select="header[@link]" /></xsl:param>
 <xsl:param name="volume"><xsl:value-of select="header[@volume]"
/></xsl:param>
 <xsl:param name="number"><xsl:value-of select="header[@number]"
/></xsl:param>
 <xsl:param name="issuedate"><xsl:value-of select="header[@issuedate]"
/></xsl:param>

 Excerpts from this week's issue
 Volume <xsl:value-of select="$volume"/>,
 Number <xsl:value-of select="$number" />: <xsl:value-of
select="issuedate"/>
</xsl:template>

</xsl:stylesheet>

----- Original Message -----
From: "Mike Brown" <mike@xxxxxxxx>
To: <xsl-list@xxxxxxxxxxxxxxxxxxxxxx>
Sent: Wednesday, August 21, 2002 5:22 PM
Subject: Re: [xsl] trying to set a parameter equal to an elements attribute


> Noel Golding wrote:
> > > <!-- XML FILE -->
> > > <root>
> > >     <header volume="8"/>
> > >
> > >     <article>
> > >         <para>
> > >             Some text here
> > >        </para>
> > >     </article>
> > > </root>
> > >
> > > <!-- XSLT FILE -->
> > > <xsl:stylesheet version="1.0" xmlns:xsl="">
> > >     <xsl:template match="root">
> > >         <xsl:param name="vol"><xsl:value-of select="header[@volume]"/>
> > >     </xsl:template>
> > > </xsl:stylesheet>
>
> 1. you need to put the XSLT namespace name in the xmlns:xsl
>
> 2. xsl:variable and xsl:param create a new object and give it a name.
>    xsl:value-of creates a text node, unless there is no text to create.
>
> Assuming you meant to put </xsl:param> after the value-of, what you did
was
> try to set $vol to whatever value for it was passed into the template.
None
> was (unless there's more to your stylesheet), so $vol was instead set to
be a
> new object of type "result tree fragment" (which is a non-traversable
> node-set). This object consisted of a root node with one child: the text
node
> that was created by xsl:value-of.  You created this 'vol' object but you
never
> made reference to $vol, so you got no output.
>
> I assume you just wanted
>
> <xsl:template match="root">
>   <xsl:value-of select="header[@volume]"/>
> </xsl:template>
>
> or
>
> <xsl:template match="root">
>   <xsl:variable name="vol" select="header[@volume]"/>
>   <xsl:value-of select="$vol"/>
> </xsl:template>
>
> or, if you're passing in $vol from outside the stylesheet, but defaulting
> it to header[@volume] if it's not passed in, you need a top-level param:
>
> <xsl:param name="vol" select="/root/header[@volume]"/>
>
> <xsl:template match="root">
>   <xsl:value-of select="$vol"/>
> </xsl:template>
>
>    - Mike
>
____________________________________________________________________________
>   mike j. brown                   |  xml/xslt: http://skew.org/xml/
>   denver/boulder, colorado, usa   |  resume: http://skew.org/~mike/resume/
>
>  XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


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


Current Thread