You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cocoon.apache.org by C Bram Dit Saint Amand <sc...@comp.leeds.ac.uk> on 2003/06/29 22:50:38 UTC

into problem

This is an extract from "request_attributes.xsl", a logicsheet which is
called by "some_page.xsp"

----
<xsl:template match="request-attributes:get/webaction">
    <xsl:variable name="webaction-value"><xsp-request:get-parameter
name="webaction"/></xsl:variable>
    <xsl:if test="contains($webaction-value, 'add_to_favourites_session')
and contains('add_to_favourites_session', $webaction-value)">
        <esql:connection>
          <esql:pool>perso-mysql</esql:pool>
          <esql:execute-query>
            <esql:query>INSERT INTO FavouritesBasketSession(SessionID,
URL) VALUES('<xsp-session:get-id/>', '<xsp-request:get-attribute
name="relative-url"/>');</esql:query>
          </esql:execute-query>
        </esql:connection>
    </xsl:if> </xsl:template>
----


When I access "some_page.xsp?webaction=add_to_favourites_session", the
template is executed: the <xsl:variable> is created, but what is inside
the <xsl:if> *isn't* executed, which suggests that there is a problem with
the <xsl:variable>. For information, displaying the variable's content
with <xsl:copy-of> works (it correctly displays
'add_to_favourites_session'), but with <xsl:value-of> it doesn't display
anything.


The questions:
--------------
- Why doesn't it work?
- I'm a Cocoon newbie, so if you have any comments on my code (how to
write it better), I'm open to suggestions.


Thanks in advance.


---------------------------------------------------------------------
To unsubscribe, e-mail: cocoon-users-unsubscribe@xml.apache.org
For additional commands, e-mail: cocoon-users-help@xml.apache.org


Re: into problem

Posted by François Parlant <fx...@laposte.net>.
I'm not an expert (sorry) so this is only a suggestion

1)  some whitespaces might interfere between the string
'add_to_favourites_session' and the value of the $webaction-value variable.
I would suggest a formula more like ;

normalize-space($query)

 <xsl:if test="contains(normalize-space($webaction-value),
'add_to_favourites_session')
and contains('add_to_favourites_session',
normalize-space($webaction-value))">

...just to make sure.


2) In xsl, calling a variable by xsl:value-of only selects the string part
of the nodes (the text()). It means that if the variable is more than simple
text and include nodes around it or inside it (it's called a node-set or
nodeset because it contains tags and text, hope I'm not making too much
mistakes saying that), only the text will appear when asking for
xsl:value-of.

xsl-copy-of on the other hand, copies all what is inside the variable, nodes
(tags) and text and attributes ...

The best referenc is at the xsl FAQ (in the "variable"  page):
http://www.dpawson.co.uk/xsl/sect2/N8090.html#d8123e583

Solution (if that is the problem, which is not sure at all):
Most xsl processor have a "node-set" or "nodeset" function which is an
extension of the xsl specification. For xalan it's xalan:nodeset, but you've
got some for saxon or xt. (beware, you've got to add the specific namespace
of your processor on top of your page for this tags to be executed)

This stuff enable you to check parts by parts the inside of the variable,
for exemple calling by templates for each part (nodes attributes and text)

Hope it helps, but I guess you might want better information. The xsl list
is very active.

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

François Parlant


----- Original Message ----- 
From: "C Bram Dit Saint Amand" <sc...@comp.leeds.ac.uk>
To: <co...@xml.apache.org>
Sent: Sunday, June 29, 2003 10:50 PM
Subject: <xsp-request:get-parameter> into <xsl:variable> problem


> This is an extract from "request_attributes.xsl", a logicsheet which is
> called by "some_page.xsp"
>
> ----
> <xsl:template match="request-attributes:get/webaction">
>     <xsl:variable name="webaction-value"><xsp-request:get-parameter
> name="webaction"/></xsl:variable>
>     <xsl:if test="contains($webaction-value, 'add_to_favourites_session')
> and contains('add_to_favourites_session', $webaction-value)">
>         <esql:connection>
>           <esql:pool>perso-mysql</esql:pool>
>           <esql:execute-query>
>             <esql:query>INSERT INTO FavouritesBasketSession(SessionID,
> URL) VALUES('<xsp-session:get-id/>', '<xsp-request:get-attribute
> name="relative-url"/>');</esql:query>
>           </esql:execute-query>
>         </esql:connection>
>     </xsl:if> </xsl:template>
> ----
>
>
> When I access "some_page.xsp?webaction=add_to_favourites_session", the
> template is executed: the <xsl:variable> is created, but what is inside
> the <xsl:if> *isn't* executed, which suggests that there is a problem with
> the <xsl:variable>. For information, displaying the variable's content
> with <xsl:copy-of> works (it correctly displays
> 'add_to_favourites_session'), but with <xsl:value-of> it doesn't display
> anything.
>
>
> The questions:
> --------------
> - Why doesn't it work?
> - I'm a Cocoon newbie, so if you have any comments on my code (how to
> write it better), I'm open to suggestions.
>
>
> Thanks in advance.
>


---------------------------------------------------------------------
To unsubscribe, e-mail: cocoon-users-unsubscribe@xml.apache.org
For additional commands, e-mail: cocoon-users-help@xml.apache.org


Re: into problem

Posted by Christian Haul <ha...@dvs1.informatik.tu-darmstadt.de>.
On 29.Jun.2003 -- 09:50 PM, C Bram Dit Saint Amand wrote:
> This is an extract from "request_attributes.xsl", a logicsheet which is
> called by "some_page.xsp"
> 
> <xsl:template match="request-attributes:get/webaction">
>     <xsl:variable name="webaction-value"><xsp-request:get-parameter
> name="webaction"/></xsl:variable>
>     <xsl:if test="contains($webaction-value, 'add_to_favourites_session')
> and contains('add_to_favourites_session', $webaction-value)">

$webaction-value most likely contains some XSP or Java code at the
time the logicsheet is applied -- which is when the XSP is translated
to Java servlet sourcecode *not* which every request!

So you may not use XSL to check for run time values in a
logicsheet. You need to use Java instead.

>         <esql:connection>
>           <esql:pool>perso-mysql</esql:pool>
>           <esql:execute-query>
>             <esql:query>INSERT INTO FavouritesBasketSession(SessionID,
> URL) VALUES('<xsp-session:get-id/>', '<xsp-request:get-attribute
> name="relative-url"/>');</esql:query>
>           </esql:execute-query>
>         </esql:connection>
>     </xsl:if> </xsl:template>
> 
> 
> When I access "some_page.xsp?webaction=add_to_favourites_session", the
> template is executed: the <xsl:variable> is created, but what is inside
> the <xsl:if> *isn't* executed, which suggests that there is a problem with
> the <xsl:variable>. For information, displaying the variable's content
> with <xsl:copy-of> works (it correctly displays
> 'add_to_favourites_session'), but with <xsl:value-of> it doesn't display
> anything.

Indeed, since it effectively copies the XSP / Java code used to read
the request attribute. It does not, however, copy the _value_ of that
attribute. 

	Chris.
-- 
C h r i s t i a n       H a u l
haul@informatik.tu-darmstadt.de
    fingerprint: 99B0 1D9D 7919 644A 4837  7D73 FEF9 6856 335A 9E08

---------------------------------------------------------------------
To unsubscribe, e-mail: cocoon-users-unsubscribe@xml.apache.org
For additional commands, e-mail: cocoon-users-help@xml.apache.org