xsl-list
[Top] [All Lists]

Re: Passing params problem.

2005-04-29 13:27:34
Thanks Michael, that's was exactly what I wanted to know and sorry to
all because of the double post.

Bye
Francesco.

On 4/29/05, Michael Kay <mike(_at_)saxonica(_dot_)com> wrote:
I don't have time to study your problem in detail, but looking at the
summary:

  The real problem I think that is that the param $currentpage never
  gets to <bbwps:navigationMenu-pageHere/> because is inside some HTML,
  is this true? or the param buble down the parsed XML all the way?

I think it's likely that you're falling into the trap that if you do an
apply-templates with parameters, and there's no explicit template rule for
one of the child elements, then the built in template rule gets invoked,
which calls apply-templates on the grandchildren, but (in 1.0) without
passing the parameters on to the template that matches the grandchildren.
(This changes in 2.0).

Michael Kay
http://www.saxonica.com/


-----Original Message-----
From: Francesco Barresi [mailto:kywocs(_at_)gmail(_dot_)com]
Sent: 29 April 2005 18:03
To: xsl-list
Subject: [xsl] Passing params problem.

Hi all,
  I have a problem..mm that's strange :-P. The thing is that there's
must be some conceptual error in my xsl because according to what I
know should work just fine, here it goes:

  I have an xml (layouts.xml) like this:

 <div class="menu_2">
     <bbwps:navigationMenu-pagesHere>
     <ul>
         <bbwps:navigationMenu-for-each-page>
             <bbwps:navigationMenu-open>
                 <li>
                     <bbwps:navigationMenu-pageHere/>
                     <ul class="abierto">
                         <bbwps:navigationMenu-childrenHere/>
                     </ul>
                 </li>
             </bbwps:navigationMenu-open>
             <bbwps:navigationMenu-currentpage>
                 <li>
                     <bbwps:navigationMenu-pageHere/>
                     <ul class="descendientes">
                         <bbwps:navigationMenu-childrenHere/>
                     </ul>
                 </li>
             </bbwps:navigationMenu-currentpage>
             <bbwps:navigationMenu-any>
                 <li>
                     <bbwps:navigationMenu-pageHere/>
                 </li>
             </bbwps:navigationMenu-any>
         </bbwps:navigationMenu-for-each-page>
     </ul>
     </bbwps:navigationMenu-pagesHere>
 </div>

  It have some HTML with some "proprietary" tags with the namespace
BBWPS, this is used to make a typical vertical menu in a html page, as
you can see there is a "for-each" (navigationMenu-for-each-page) which
contains the templates for the different types of pages: open,
currentpage, any. This pages are in a xml ($index) with a simple tree
structure which represents the tree structure of the web site.

  The part of the xsl concerning the menu is this:

 <!--PAGES HERE. this acts on the layout-->
     <xsl:template match="bbwps:navigationMenu-pagesHere"
mode="layout">
         <xsl:apply-templates select="*" mode="navigationMenu"/>
     </xsl:template>
     <!--HTML. this acts on the layout-->
     <xsl:template match="html:*" mode="navigationMenu">
         <xsl:element name="{local-name()}" >
             <xsl:for-each select="@*">
                 <xsl:attribute name="{local-name()}">
                     <xsl:value-of select="."/>
                 </xsl:attribute>
             </xsl:for-each>
             <xsl:if test="./child::node()">
                 <xsl:apply-templates mode="navigationMenu"/>
             </xsl:if>
         </xsl:element>
     </xsl:template>
     <!--FOR EACH PAGE. this acts on the layout-->
     <xsl:template match="bbwps:navigationMenu-for-each-page"
mode="navigationMenu">
         <xsl:apply-templates
select="$index/ancestor-or-self::*[(_at_)subhome='true'][1]/child"
mode="navigationMenu">
             <xsl:with-param name="templates" select="."/>
         </xsl:apply-templates>
     </xsl:template>
     <!--OPEN PAGE. this acts on the index-->
     <xsl:template match="child[(_at_)open='true']" mode="navigationMenu">
         <xsl:param name="templates"/>
         <xsl:apply-templates
select="$templates//bbwps:navigationMenu-open" mode="navigationMenu">
             <xsl:with-param name="currentpage" select="."/>
         </xsl:apply-templates>
     </xsl:template>
     <!--CURRENT PAGE. this acts on the index-->
     <xsl:template match="child[(_at_)currentpage='true']"
mode="navigationMenu">
         <xsl:param name="templates"/>
         <xsl:apply-templates
select="$templates//bbwps:navigationMenu-currentpage"
mode="navigationMenu">
             <xsl:with-param name="currentpage" select="."/>
         </xsl:apply-templates>
     </xsl:template>
     <!--ANY PAGE. this acts on the index-->
     <xsl:template match="child" mode="navigationMenu">
         <xsl:param name="templates"/>
         <xsl:apply-templates
select="$templates//bbwps:navigationMenu-any" mode="navigationMenu">
             <xsl:with-param name="currentpage" select="."/>
         </xsl:apply-templates>
     </xsl:template>
     <!--CHILDREN HERE. this acts on the layout-->
     <xsl:template match="bbwps:navigationMenu-childrenHere"
mode="navigationMenu">
         <xsl:param name="currentpage"/>
         <xsl:param name="templates"/>
         <xsl:apply-templates select="$currentpage/child"
mode="navigationMenu">
             <xsl:with-param name="templates" select="$templates"/>
         </xsl:apply-templates>
     </xsl:template>
     <!--PAGE HERE. this acts on the layout-->
     <xsl:template match="bbwps:navigationMenu-pageHere"
mode="navigationMenu">
         <xsl:param name="currentpage"/>
         <xsl:choose>
             <xsl:when test="$currentpage/@type='external-link'">
                 <xsl:call-template name="crea-link">
                     <xsl:with-param name="tipo" select="'http'"/>
                     <xsl:with-param name="url"
select="$currentpage/url"/>
                     <xsl:with-param name="cont"
select="$currentpage/nome"/>
                 </xsl:call-template>
             </xsl:when>
             <xsl:otherwise>
                 <xsl:call-template name="crea-link">
                     <xsl:with-param name="tipo" select="'idpagina'"/>
                     <xsl:with-param name="url"
select="$currentpage/id_inter"/>
                     <xsl:with-param name="cont"
select="$currentpage/nome"/>
                 </xsl:call-template>
             </xsl:otherwise>
         </xsl:choose>
     </xsl:template>

 This doesn't work, what I get is this:

 [...]
 <div class="menu_2">
 <ul>
 [..]

  This is because the $currentpage param that is generated in the
CHILD templates doesn't work properly. CHILD is a really stupid name
that i used in the xml, is a tag not the "child::". The CHILD
templates work on the $index and when I set the select attribute on
with-param like this: select="." I get an empty $currentpage on the
tags like <bbwps:navigationMenu-pageHere/> wich are inside some HTML
tags.

  <xsl:template match="child" mode="navigationMenu">
           <xsl:param name="templates"/>
         <xsl:apply-templates
select="$templates//bbwps:navigationMenu-any" mode="navigationMenu">
               <!-- HERE IS THE PROBLEM -->
               <xsl:with-param name="currentpage" select="."/>
           </xsl:apply-templates>
     </xsl:template>

  Debugging the xsl in the CHILD templates the context node is correct
but when I use select="." I get an empty param.

  The real problem I think that is that the param $currentpage never
gets to <bbwps:navigationMenu-pageHere/> because is inside some HTML,
is this true? or the param buble down the parsed XML all the way?

 Any tip is welcome.

 Thanks
 Bye
 Francesco.

--
www.GetFirefox.com !!
http://kywocs.blogspot.com

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--




-- 
www.GetFirefox.com !!
http://kywocs.blogspot.com

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



<Prev in Thread] Current Thread [Next in Thread>