This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
RE: Can you pass a parameter from a stylesheet to the resulting HTML file?
- From: Kathryn dot Grant at freight dot fedex dot com
- To: xsl-list at lists dot mulberrytech dot com
- Date: Tue, 4 Jun 2002 10:18:55 -0700
- Subject: RE: [xsl] Can you pass a parameter from a stylesheet to the resulting HTML file?
- Reply-to: xsl-list at lists dot mulberrytech dot com
Joerg,
Once again, I really appreciate your help. The problem isn't solved yet,
but I think it's because I oversimplified my original explanation and code.
Here's a better simplified version of my xhmtl file:
<table>
<tr>
<td>
<ol>
<li>item 1</li>
<li class="mgronly">item 2</li>
<li>item 3</li>
</ol>
</td>
</tr>
<tr>
<td>
<ol start="var">
<li>item 4</li>
<li>item 5</li>
<li>item 6</li>
</ol>
</td>
</tr>
</table>
I am transforming this document into two different documents by using two
different xsl files. The first xsl file simply copies everything:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xhtml="http://www.w3.org/1999/xhtml"
version="1.0">
<xsl:output method="xml" encoding="UTF-8"/>
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
The second xsl file filters out any <li> item with a class of "mgronly":
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xhtml="http://www.w3.org/1999/xhtml"
version="1.0">
<xsl:output method="xml" encoding="UTF-8"/>
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="xhtml:li[@class='mgronly']"/>
</xsl:stylesheet>
Here's what I'm trying to do: In the first transformation, I need to
replace "var" in the second <ol> tag with "4".
In the second transformation, because one of the preceding <li> items is
filtered out, I need to replace "var" with "3". (I don't need to have the
XSL files count the <li> items to compute the "4" and "3", unless it's very
easy. I can just hard code "4" and "3".) Is there a way to do this?
Thanks again for all your help--
Kathryn
Date: Sat, 01 Jun 2002 01:34:52 +0200
From: Joerg Heinicke <joerg.heinicke@gmx.de>
Subject: Re: [xsl] Can you pass a parameter from a stylesheet to the
resulting HTML file?
Hello Kathryn,
it's a bit difficult to see, what you are doing with your two
stylesheets. In general you can do it in the following:
<xsl:template match="foo">
<xsl:apply-templates select="bar">
<xsl:with-param name="name-of-param" select="value-of-param"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="bar">
<xsl:param name="name-of-param" select="default-value-of-param"/>
<xsl:value-of select="$name-of-param"/>
</xsl:template>
If your stylesheet below runs on the XML below, you can do something
like the following:
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="ol">
<ol start="{count(preceding::ol) + 1}">
<xsl:apply-templates select="node() | @*"/>
</ol>
</xsl:template>
Regards,
Joerg
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list