Subject: [xsl] Lookup, eliminating duplicates and sorting From: "Manfred Staudinger" <manfred.staudinger@xxxxxxxxx> Date: Wed, 19 Jul 2006 13:29:00 -0700 |
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] templates with modes., Webmaster | Thread | Re: [xsl] Lookup, eliminating dupli, Dimitre Novatchev |
RE: [xsl] templates with modes., Webmaster | Date | [xsl] XSLT in IE w/Sarissa - omit-x, Lindsey Simon |
Month |