Subject: Re: [xsl] Lookup, eliminating duplicates and sorting From: "Mukul Gandhi" <gandhi.mukul@xxxxxxxxx> Date: Thu, 20 Jul 2006 23:07:09 +0530 |
<?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:common="http://exslt.org/common" exclude-result-prefixes="common">
<xsl:template match="/a"> <e3> <xsl:variable name="rtf"> <xsl:for-each select="e1/b"> <b> <xsl:choose> <xsl:when test="../../e2/f/@c = ."> <xsl:value-of select="../../e2/f[@c = current()]/@b1" /> </xsl:when> <xsl:otherwise> <xsl:value-of select="." /> </xsl:otherwise> </xsl:choose> </b> </xsl:for-each> </xsl:variable> <xsl:for-each select="common:node-set($rtf)/b[not(. = preceding-sibling::b)]"> <xsl:sort select="." /> <b2><xsl:value-of select="." /></b2> </xsl:for-each> </e3> </xsl:template>
Regards, Mukul
Hi list, 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. Sample input xml: <?xml version="1.0" encoding="UTF-8" ?> <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> The input table _e1_ will be transformed using _f_ to <e1> <b>abc</b> <b>abd</b> <b>abc</b> <b>abj</b> <b>abi</b> <b>abi</b> <b>abd</b> </e1> and finally should become === what I would like to have === <e3> <b2>abc</b2> <b2>abd</b2> <b2>abi</b2> <b2>abj</b2> </e3> 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:
<?xml version="1.0" encoding="UTF-8" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" indent="yes" />
<xsl:template match="node() | @*"> <xsl:copy> <xsl:apply-templates select="node() | @*"/> </xsl:copy> </xsl:template> <xsl:key name="dupl" match="b" use="."/> <xsl:template match="e1"> <xsl:copy> <xsl:for-each select="b[count(self::b|key('dupl',self::b)[1])=1]"> <xsl:sort select="."/> <b><xsl:value-of select="."/></b> </xsl:for-each> </xsl:copy> </xsl:template> <xsl:template match="e2"/> <xsl:template match="e3"/>
<xsl:template match="node() | @*" mode="trans"> <xsl:copy> <xsl:apply-templates select="node() | @*" mode="trans"/> </xsl:copy> </xsl:template> <xsl:key name="trans" match="f" use="@c"/> <xsl:template match="e1" mode="trans"> <xsl:copy> <xsl:for-each select="b"> <xsl:choose> <xsl:when test="key('trans', .)/@b1"> <b><xsl:value-of select="key('trans', .)/@b1"/></b> </xsl:when> <xsl:otherwise> <b><xsl:value-of select="."/></b> </xsl:otherwise> </xsl:choose> </xsl:for-each> </xsl:copy> </xsl:template> <xsl:template match="e2" mode="trans"/> <xsl:template match="e3" mode="trans"/>
<xsl:template match="/"> <xsl:apply-templates mode="trans"/> <xsl:apply-templates/> </xsl:template> </xsl:stylesheet>
Many thanks in advance, Manfred
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Lookup, eliminating dupli, Manfred Staudinger | Thread | Re: [xsl] Lookup, eliminating dupli, Manfred Staudinger |
RE: [xsl] Japanese characters show , Michael Kay | Date | RE: [xsl] Japanese characters show , David Nesbitt |
Month |