[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: problem with keys and Meunchian method

Subject: Re: problem with keys and Meunchian method
From: Geert Josten <Geert.Josten@xxxxxxxxxxx>
Date: Thu, 18 Nov 2004 21:01:39 +0100
meunchian grouping
Hi,

The solution I posted gives a limited scope combined with a key as well. It is just a matter of defining your index properly and using a handy key to retrieve the values..

Though I would agree that sometimes, keys can be a kind of overkill. Only not very often..

Grtz,
Geert

G. Ken Holman wrote:

At 2004-11-17 12:10 -0800, mark_fletcher@xxxxxxxxxxxxxx wrote:

I'm having a problem pulling distinct nodes out of some xml with duplicate
values at multiple levels.


I find that variable-based grouping is far more effective for multiple-level distinction because key-based grouping is always working in document-wide scope.

In all cases, I want to get the data from the
last node of a set that shares duplicate values.  (This xml will be in a
file that gets appended to multiple times.  So I can assume that the last
tags are the most current.)


Fine.

In the xml below, what I'm trying to do is get a list of distinct book/code
values from the last prodline where name=PL1.


I'm assuming, though, that you'd want to do this for each of your product lines.

But I'm having no luck getting a list of distinct book/code values from
this particular prodline. I've tried creating keys and using the Meunchian
method of comparing generate-id() values, but to no avail. Any help would
be greatly appreciated!


I suggest not using the Meunchian method because of its document scope and to use the variable-based method because you can then work within a selected scope. If you Google for variable-based grouping you'll find a number of examples I've posted of doing grouping within a limited scope.

A working solution to your problem is below.

I hope this helps.

.................. Ken


t:\ftemp>type mark.xml <prodlines> <prodline> <name>Product Line 1</name> <code>PL1</code> <product> <name>Product 1</name> <code>P1</code> <book> <name>Book 1</name> <code>B1</code> </book> <book> <name>Book 2</name> <code>B2</code> </book> </product> <product> <name>Product 2</name> <code>P2</code> <book> <name>Book 1</name> <code>B1</code> </book> <book> <name>Book 3</name> <code>B3</code> </book> <book> <name>Book 4</name> <code>B4</code> </book> </product> </prodline> <prodline> <name>Product Line 2</name> <code>PL2</code> <product> <name>Product 1</name> <code>P1</code> <book> <name>Book 1</name> <code>B1</code> </book> </product> </prodline> <prodline> <name>Product Line 1 (ver 2)</name> <code>PL1</code> <product> <name>Product 1</name> <code>P1</code> <book> <name>Book 1</name> <code>B1</code> </book> <book> <name>Book 2</name> <code>B2</code> </book> <book> <name>Book 5</name> <code>B5</code> </book> </product> <product> <name>Product 2</name> <code>P2</code> <book> <name>Book 1</name> <code>B1</code> </book> <book> <name>Book 2</name> <code>B2</code> </book> <book> <name>Book 3</name> <code>B3</code> </book> <book> <name>Book 4</name> <code>B4</code> </book> </product> </prodline> </prodlines>

t:\ftemp>type mark.xsl
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                version="1.0">

<xsl:output method="text"/>

<xsl:template match="/">
  <xsl:for-each select="/prodlines/prodline">
    <xsl:variable name="bookcodes" select="product/book"/>
Product line: <xsl:value-of select="name"/>
    <xsl:for-each select="$bookcodes">
      <xsl:if test="generate-id(.)=
                    generate-id($bookcodes[name=current()/name and
                                           code=current()/code])">
        <!--hit the first of each unique group-->
        <xsl:for-each select="$bookcodes[name=current()/name and
                                         code=current()/code][last()]">
          Last book/code in product: <xsl:value-of
                       select="concat(name,'/',code,' in ', ../name)"/>
        <xsl:text>
</xsl:text>
        </xsl:for-each>
      </xsl:if>
    </xsl:for-each>
  </xsl:for-each>
</xsl:template>

</xsl:stylesheet>
t:\ftemp>saxon mark.xml mark.xsl

Product line: Product Line 1
          Last book/code in product: Book 1/B1 in Product 2

Last book/code in product: Book 2/B2 in Product 1

Last book/code in product: Book 3/B3 in Product 2

Last book/code in product: Book 4/B4 in Product 2

Product line: Product Line 2
          Last book/code in product: Book 1/B1 in Product 1

Product line: Product Line 1 (ver 2)
          Last book/code in product: Book 1/B1 in Product 2

Last book/code in product: Book 2/B2 in Product 2

Last book/code in product: Book 5/B5 in Product 1

Last book/code in product: Book 3/B3 in Product 2

Last book/code in product: Book 4/B4 in Product 2

t:\ftemp>rem Done!



--
World-wide on-site corporate, govt. & user group XML/XSL training.
G. Ken Holman                 mailto:gkholman@xxxxxxxxxxxxxxxxxxxx
Crane Softwrights Ltd.          http://www.CraneSoftwrights.com/s/
Box 266, Kars, Ontario CANADA K0A-2E0    +1(613)489-0999 (F:-0995)
Male Breast Cancer Awareness  http://www.CraneSoftwrights.com/s/bc
Legal business disclaimers:  http://www.CraneSoftwrights.com/legal




-- Geert.Josten@xxxxxxxxxxx IT-consultant at Daidalos BV, Zoetermeer (NL)

http://www.daidalos.nl/
tel:+31-(0)79-3316961
fax:+31-(0)79-3316464

GPG: 1024D/12DEBB50

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.