xsl-list
[Top] [All Lists]

RE: [xsl] Complex group-by with saxon:evaluate?

2006-09-27 07:58:06
Ok, so here's the whole relevant xsl snippet
01: <ul>
02: <xsl:for-each-group select="bibtex:entry"
group-by="tokenize(normalize-space(*/bibtex:refgroup),' *; *')">
03:     <xsl:sort select="current-grouping-key()" order="ascending"/>
04:       <li><xsl:value-of select="current-grouping-key()"/></li>
05:   </xsl:for-each-group>
06: </ul>

A:
  Now, I first replaced line 2 above with:
    02: <xsl:for-each-group select="bibtex:entry"
group-by="tokenize(normalize-space(*[name()=$groupby]),' *; *')">

That should have been

group-by="tokenize(normalize-space(*/*[name()=$groupby]),' *; *')"

C:
(with saxon:evaluate)
  I ... changed line 2 above to
    02: <xsl:for-each-group select="bibtex:entry"
group-by="tokenize(normalize-space(saxon:evaluate('*/$groupby'
)),' *; *')">

That should have been

group-by="tokenize(normalize-space(saxon:evaluate(concat('*/', $groupby)),'
*; *')"

Variables don't work by textual substitution, even in saxon:evaluate! You
must first construct an expression that contains the element name in a
position where an element name is expected, then you must evaluate the
expression you have constructed. The concat() constructs the expression, the
saxon:evaluate() evaluates it.

Michael Kay
http://www.saxonica.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>