Subject: Re: [xsl] problem with keys and Meunchian method From: "G. Ken Holman" <gkholman@xxxxxxxxxxxxxxxxxxxx> Date: Wed, 17 Nov 2004 16:37:47 -0500 |
I'm having a problem pulling distinct nodes out of some xml with duplicate values at multiple levels.
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.)
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.
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!
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: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
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
-- 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
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] problem with keys and Meu, Passin, Tom | Thread | Re: [xsl] problem with keys and Meu, Geert Josten |
RE: [xsl] problem with keys and Meu, Passin, Tom | Date | [xsl] XSL and XML in JavaScript, John |
Month |