Subject: Re: [xsl] Lookup, eliminating duplicates and sorting From: "Manfred Staudinger" <manfred.staudinger@xxxxxxxxx> Date: Wed, 19 Jul 2006 15:45:02 -0700 |
Most elegant, thanks! I'm sure I can learn a lot from this ... Manfred
> xslt 1.0 - I've a set of nodes, for which I want > a. to replace some values (most will not change), then > b. eliminate the duplicates and sort them. .............................................................................. > The text nodes represent URI's and are then used to > create html links. So far I was only able to write in > 2 different task what should be done in one: >
One simple way to do this:
The following transformation:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:key name="kb" match="b[not(. = ../../e2/f/@c)]" use="."/>
<xsl:key name="kb" match="@b1" use="../../../e1/b[. = current()/../@c]"/>
<xsl:key name="kDist" match="b | @b1" use="."/>
<xsl:template match="/"> <e3> <xsl:for-each select= "key('kb', */e1/b)[generate-id() = generate-id(key('kDist', .)[1]) ]"> <xsl:sort/>
<b2><xsl:value-of select="."/></b2> </xsl:for-each> </e3> </xsl:template> </xsl:stylesheet>
when applied on the provided source xml document:
<a> <e1> <b>abc</b> <b>abd</b> <b>abe</b> <b>abf</b> <b>abg</b> <b>abh</b> <b>abd</b> </e1> <e2> <f c="abe" b1="abc"/> <f c="abf" b1="abj"/> <f c="abg" b1="abi"/> <f c="abh" b1="abi"/> </e2> </a>
produces the wanted result:
<e3> <b2>abc</b2> <b2>abd</b2> <b2>abi</b2> <b2>abj</b2> </e3>
Hope this helped.
-- Cheers, Dimitre Novatchev --------------------------------------- Truly great madness cannot be achieved without significant intelligence.
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Lookup, eliminating dupli, Dimitre Novatchev | Thread | Re: [xsl] Lookup, eliminating dupli, Mukul Gandhi |
Re: [xsl] More XPath 1.0 Expression, Todd Ditchendorf | Date | Re: [xsl] Getting the current node,, Dimitre Novatchev |
Month |