This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: trying to set a parameter equal to an elements attribute
- From: "Noel Golding" <noel at spearreport dot com>
- To: <xsl-list at lists dot mulberrytech dot com>
- Date: Wed, 21 Aug 2002 17:57:19 -0400
- Subject: Re: [xsl] trying to set a parameter equal to an elements attribute
- References: <200208212122.g7LLMi81005260@chilled.skew.org>
- Reply-to: xsl-list at lists dot mulberrytech dot com
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@skew.org>
To: <xsl-list@lists.mulberrytech.com>
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