Re: [xsl] Passing params problem.

Subject: Re: [xsl] Passing params problem.
From: Francesco Barresi <kywocs@xxxxxxxxx>
Date: Fri, 29 Apr 2005 16:27:34 -0400
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@xxxxxxxxxxxx> 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@xxxxxxxxx]
> > 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::*[@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[@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[@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
>
>


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

Current Thread