Subject: Re: New twist: eliminating nodes with duplicate content, case-insensi tive From: Phil Lanch <phil@xxxxxxxxxxxxxxx> Date: Mon, 06 Dec 1999 19:58:44 +0000 |
Kay Michael wrote: > > > My question is really how to eliminate duplicates, counting > > <handle>FOO</handle> > > and > > <handle>foo</handle> > > as duplicates. > > > > I still need an answer, if anyone knows one. > > > > <xsl:variable "unique-handles" select="//handle[not( self::node() = > > following::handle )]"/> > > > > Can't be done in a single pass. (A brave assertion!) This is because there > is no general existential quantifier in XSLT and no map() function to > generate a set of strings by applying a function (translate()) to another > set of strings. If you apply translate to a node-set, it only translates the > string value of the first node. > > Conceptually you need (using SQL-like syntax rather than pure predicate > logic) > > select="//handle[not exists( select N from following::handle where > translate(N, $lc, $uc) = > translate(self::node(), $lc, $uc)] The code below does it in one pass (it was indeed a brave assertion!), though not by getting a list of the unique nodes into a variable. I don't think that list can be gotten into a top-level variable; into a template-level variable would be possible after even messier use of recusion than ... <xsl:variable name="up" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/> <xsl:variable name="lo" select="'abcdefghijklmnopqrstuvwxyz'"/> <xsl:template match="//handle" name="handle"> <xsl:param name="i" select="1"/> <xsl:choose> <xsl:when test="position() + $i > last()"> <handle><xsl:value-of select="translate(.,$up,$lo)"/></handle> </xsl:when> <xsl:when test="not( translate(.,$up,$lo) = translate(following::handle[$i],$up,$lo) )"> <xsl:call-template name="handle"> <xsl:with-param name="i" select="$i + 1"/> </xsl:call-template> </xsl:when> </xsl:choose> </xsl:template> -- bahhumbug phil *witness relocation program alumnus* XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: New twist: eliminating nodes wi, Kay Michael | Thread | Re: New twist: eliminating nodes wi, David Carlisle |
mapping an XML file to another?, Michael J. Hudson | Date | RE: mapping an XML file to another?, Richard Lander |
Month |