Thanks Wendell.
I have to compare timings with Martin solution...
But this one is amazing :)
Best regards,
Fabien
-----Message d'origine-----
De : Wendell Piez [mailto:wapiez(_at_)mulberrytech(_dot_)com]
Envoyé : mardi 23 novembre 2010 16:21
À : xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Objet : Re: [xsl] selecting nodes based on sibling values
Fabien,
At 09:45 AM 11/23/2010, you wrote:
Let's say I have an XML like below...
<data>
<row>
<level>40</level>
<keycode>1254.45.12</keycode>
</row>
<row>
<level>50</level>
<keycode>1254.45.12.7</keycode>
</row>
<row>
<level>50</level>
<keycode>1254.45.12.8</keycode>
</row>
<row>
<level>50</level>
<keycode>1254.45.12.9</keycode>
</row>
<row>
<level>40</level>
<keycode>99.25.6</keycode>
</row>
<row>
<level>50</level>
<keycode>99.25.6.45</keycode>
</row>
<row>
<level>50</level>
<keycode>99.25.6.46</keycode>
</row>
</data>
What could be the XPath expression to get the maximum number of nodes of
level=50 in data those keycode starts like the level=40 line ?
Here the answer would be 3 as the maximum number of level = 50 nodes for
a given level = 40 is 3
I have tried several things, but I am stuck....
(I am using XSLT 2.0 on Saxon)
This is a bit tricky since associating the level 50 nodes with the
level 40 nodes is a bit tricky.
One way to do this is using a key (an old 1.0 upconversion trick):
<xsl:key name="get-level-50" match="row[level='50']"
use="generate-id(preceding-sibling::row[level='40'][1])"/>
This enables you to get all the level 40 rows that belongs to any
level 50 row, using that row as context.
Then we can get a sequence representing the values of the counts like so:
//row[level='40']/count(key('get-level-50',generate-id(.))
and the max:
max(//row[level='40']/count(key('get-level-50',generate-id(.)))
Note: untested; watch out for typos.
Cheers,
Wendell
======================================================================
Wendell Piez
mailto:wapiez(_at_)mulberrytech(_dot_)com
Mulberry Technologies, Inc. http://www.mulberrytech.com
17 West Jefferson Street Direct Phone: 301/315-9635
Suite 207 Phone: 301/315-9631
Rockville, MD 20850 Fax: 301/315-8285
----------------------------------------------------------------------
Mulberry Technologies: A Consultancy Specializing in SGML and XML
======================================================================
--~------------------------------------------------------------------
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>
--~--