[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
Fabien,
At 09:45 AM 11/23/2010, you wrote:
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):
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.
Re: [xsl] selecting nodes based on sibling values
Subject: Re: [xsl] selecting nodes based on sibling values From: Wendell Piez <wapiez@xxxxxxxxxxxxxxxx> Date: Tue, 23 Nov 2010 10:20:32 -0500 |
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@xxxxxxxxxxxxxxxx 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 ======================================================================
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] selecting nodes based on , Fabien Tillier | Thread | Re: [xsl] selecting nodes based on , Martin Honnen |
RE: [xsl] selecting nodes based on , Fabien Tillier | Date | Re: [xsl] selecting nodes based on , Martin Honnen |
Month |