From: Pappa [mailto:anarkin(_at_)ntlworld(_dot_)com]
Sent: Wednesday, August 27, 2003 2:59 PM
Subject: [xsl] Variable - Results Tree Fragment Problem
Hi,
I have a little problem, which I assume is connected with the
values I'm
after being converted to results tree fragments. I have tried various
things, but nothing seems to work. Also, as I'm using Sablotron, I
cannot use extensions such as node-set() to solve this problem.
I'm trying to get the values of all the parameters without
referencing
each one explicitly.
<!-- THIS WAS MY FIRST ATTEMPT AT GETTING THE VALUES OF THE
PARAMETERS WITHOUT REFERENCING THEM EXPLICITLY - I GET THE
RESULT ', , ' -->
<xsl:for-each
select='document("this.xsl")/xsl:stylesheet/xsl:param'>
<xsl:value-of select='.'/><xsl:if
test='position()!=last()'>, </xsl:if>
</xsl:for-each>
<xsl:value-of select="@select"/>
This will return the value of the select attribute, but that will not be the
same as the value of the param itself! For instance, if your param is:
<xsl:param name="p1" select="/document/params/p1"/>
which represents a node-set, then <xsl:value-of select="@select"/> will
output the string '/document/params/p1' and not the node-set indicated by
the expression. Even if your param is a string:
<xsl:param name="p1" select="'red'"/>
then <xsl:value-of select="@select"/> will return the literal string 'red'
with quotes included--this is NOT equal to <xsl:value-of select="$p1"/>!
Perhaps I'm misinterpreting your question, but it appears that you're
attempting to impose a procedural construct on your stylesheet, for which
XSLT is ill-suited. Why would you need to loop through stylesheet
parameters? If it's because the number of parameters may change, then it
would be much easier to create a source document with the input parameters
instead:
<parameters>
<param name="p1" value="red"/>
<param name="p2" value="green"/>
<param name="p3" value="blue"/>
</parameters>
Then your solution becomes much more elegant:
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/parameters">
<xsl:apply-templates select="param"/>
</xsl:template>
<xsl:template match="param">
<xsl:value-of select="@value"/>
<xsl:if test="position() != last()">, </xsl:if>
</xsl:template>
</xsl:stylesheet>
Alternatively you can iterate through the parameters:
<xsl:template match="/parameters">
<xsl:for-each select="param">
<xsl:value-of select="@value"/>
<xsl:if test="position() != last()">, </xsl:if>
</xsl:for-each>
</xsl:template>
cheers,
b.
| brian martinez
brian(_dot_)martinez(_at_)cendant(_dot_)com |
| lead gui programmer 303.357.3548 |
| cheap tickets, part of trip network fax 303.357.3380 |
| 6560 greenwood plaza blvd., suite 400 englewood, co 80111 |
| cendant travel distribution services http://www.cheaptickets.com/ |
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list