This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: variable never matched hardcoded string
- From: Joerg Heinicke <joerg dot heinicke at gmx dot de>
- To: xsl-list at lists dot mulberrytech dot com
- Date: Thu, 25 Jul 2002 06:39:31 +0200
- Subject: Re: [xsl] variable never matched hardcoded string
- References: <3D3F6B55.5BBCAC98@rhb.com.my>
- Reply-to: xsl-list at lists dot mulberrytech dot com
Hello Maizatul,
you have some strange things in your code - maybe these are only typos
in the mail.
Maizatul Alma Elias wrote:
Hi,
Basically, what I'm trying to do is to assign each value of <dataValue>
into a particular variable based on it attribute(fid).
My problem is, the ** part never matched and also I would like to know
if this is the right thing to do it.
Thanks.
maizatul
xml
----
<message>
<dataContent>
<dataValue fid="R055">706</dataValue>
<dataValue fid="R039">1066</dataValue>
......
</dataContent>
</message>
xslt
---
<xsl:template match="message">
<xsl:variable name="ABC">
<xsl:call-template name="xyz">
<xsl:with-param name="p_Code">stock</xsl:with-param>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="ABC">
<xsl:call-template name="xyz">
<xsl:with-param name="p_Code">action</xsl:with-param>
</xsl:call-template>
</xsl:variable>
.......
.......
</xsl:template>
In this template you declared twice the variable "ABC", what's an error.
Furthermore you are creating Result Tree Fragments in your parameters,
where you want to have a string. That's not really bad, but can be
avoided by writing <xsl:with-param name="xyz" select="'action'"/>.
For information on RTF see
http://www.w3.org/TR/xslt#section-Result-Tree-Fragments,
http://www.dpawson.co.uk/xsl/xslvocab.html#d59e410 and
http://www.dpawson.co.uk/xsl/xslvocab.html#rtf.
<xsl:template match="dataContent/dataValue">
Should this template be named 'xyz'??
<xsl:param name="p_Code">
<xsl:apply-templates select="dataContent/dataValue"/>
What template do you apply on these nodes?
<xsl:if test = "normalize-space($p_code) = 'stock')"> **
right parenthesis? ^^^
<xsl:if test = "consist(@fid,'039')">
There is no function consist(), I assume you mean contains().
<xsl:value-of select=(.)>
</xsl:if>
</xsl:if>
<xsl:if test = "normalize-space($p_code) = 'action')"> **
<xsl:if test = "consist(@fid,'055')">
<xsl:value-of select=(.)>
</xsl:if>
</xsl:if>
.........
</xsl:template>
Why not simply
<xsl:template match="message">
<xsl:variable name="ABC" select="dataContent/dataValue[contains(@fid,
'039')"/>
<xsl:variable name="DEF" select="dataContent/dataValue[contains(@fid,
'055')"/>
...
</xsl:template>
Or if you really want to collect all cases in an extra template:
<xsl:template match="message">
<xsl:variable name="ABC">
<xsl:apply-templates select="dataContent/dataValue">
<xsl:with-param name="p_Code" select="'stock'"/>
</xsl:apply-templates>
</xsl:variable>
<xsl:variable name="DEF">
<xsl:apply-templates select="dataContent/dataValue">
<xsl:with-param name="p_Code" select="'action'"/>
</xsl:apply-templates>
</xsl:variable>
</xsl:template>
<xsl:template match="dataContent/dataValue">
<xsl:param name="p_Code" select="''"/>
<xsl:choose>
<xsl:when test="$p_code = 'stock' and contains(@fid, '039')">
<xsl:value-of select="."/>
</xsl:when>
<xsl:when test="$p_code = 'action' and contains(@fid, '055')">
<xsl:value-of select="."/>
</xsl:when>
</xsl:choose>
</xsl:template>
But I don't see really sense in the second way, maybe you have to
explain your problem a bit more.
Hope this helps,
Joerg
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list