RE: [xsl] Grouping over multiple files

Subject: RE: [xsl] Grouping over multiple files
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Sat, 14 Jan 2006 21:35:29 -0000
> Florent, would you be kind enough to explain the function.

Actually, I think it should be using the operator "is" rather than "=". But
it's trying to return one of the strings "north", "south", etc, depending on
which of the four global variables is the root of the tree containing the
parameter $node.

I would personally be inclined to write it as

 <xsl:function name="k:get-source" as="xs:string">
   <xsl:param    name="node" as="node()"/>
   <xsl:variable name="root" as="node()" select="root($node)"/>
   <xsl:sequence select='
     for $i in 1 to 4 return
       if (($north, $south, $east, $west)[$i] is $root)
       then ("north", "south", "east", "west")[$i]
       else ()'/>
  </xsl:function>


> 
> >       <xsl:function name="k:get-source" as="xs:string">
> >         <xsl:param    name="node" as="node()"/>
> >         <xsl:variable name="root" as="node()"
> >                       select="root($node)"/>
> >         <xsl:choose>
> >           <xsl:when test="$root = $north">
> >             <xsl:text>north</xsl:text>
> >           </xsl:when>
> >           <xsl:when test="$root = $south">
> >             <xsl:text>south</xsl:text>
> >           </xsl:when>
> >           <xsl:when test="$root = $east">
> >             <xsl:text>east</xsl:text>
> >           </xsl:when>
> >           <xsl:when test="$root = $west">
> >             <xsl:text>west</xsl:text>
> >           </xsl:when>
> >           <xsl:otherwise>
> >             <xsl:message terminate="yes">
> >               <xsl:text>Unjnown source!</xsl:text>
> >             </xsl:message>
> >           </xsl:otherwise>
> >         </xsl:choose>
> >       </xsl:function>
> > 
> 
> 
> Thanks.
> 
> --
> Kevin

Current Thread