Subject: Re: [xsl] duplicate occurances within strings From: JBryant@xxxxxxxxx Date: Thu, 16 Dec 2004 15:51:25 -0600 |
We had a very similar question last week, except that that person was getting the string from a node in the document and didn't care about a string-compare function. Assuming you also don't care about a string-compare function, here's a modification of last week's answer that does the job with a recursive template. If you really do want to use a string-compare function, someone else will have to answer your question, as I don't use MSXSL. Note that my solution is case-sensitive, so Hello, hello, cat and Cat are all different words. Jay Bryant Bryant Communication Services <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > <xsl:output method="text" omit-xml-declaration="yes" indent="no" /> <xsl:template match="/"> <xsl:variable name="theString" select="Hello, Hello, Hello, test, dog, cat, cat"/> <xsl:call-template name="makeList"> <xsl:with-param name="textIn" select="translate($theString, ',', '')"/> <xsl:with-param name="wordsSoFar"/> </xsl:call-template> </xsl:template> <xsl:template name="makeList"> <xsl:param name="textIn"/> <xsl:param name="wordsSoFar"/> <xsl:choose> <xsl:when test="contains($textIn, ' ')"> <xsl:variable name="firstWord" select="substring-before($textIn, ' ')"/> <xsl:choose> <xsl:when test="not(contains($wordsSoFar, $firstWord))"> <xsl:variable name="newString"> <xsl:choose> <xsl:when test="string-length($wordsSoFar)=0"> <xsl:value-of select="$firstWord"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="$wordsSoFar"/><xsl:text>, </xsl:text><xsl:value-of select="$firstWord"/> </xsl:otherwise> </xsl:choose> </xsl:variable> <xsl:call-template name="makeList"> <xsl:with-param name="textIn" select="substring-after($textIn, ' ')"/> <xsl:with-param name="wordsSoFar" select="$newString"/> </xsl:call-template> </xsl:when> <xsl:otherwise> <xsl:call-template name="makeList"> <xsl:with-param name="textIn" select="substring-after($textIn, ' ')"/> <xsl:with-param name="wordsSoFar" select="$wordsSoFar"/> </xsl:call-template> </xsl:otherwise> </xsl:choose> </xsl:when> <xsl:otherwise> <xsl:choose> <xsl:when test="string-length($wordsSoFar)=0"> <xsl:value-of select="$textIn"/> </xsl:when> <xsl:otherwise> <xsl:choose> <xsl:when test="contains($wordsSoFar, $textIn)"> <xsl:value-of select="$wordsSoFar"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="$wordsSoFar"/><xsl:text>, </xsl:text><xsl:value-of select="$textIn"/> </xsl:otherwise> </xsl:choose> </xsl:otherwise> </xsl:choose> </xsl:otherwise> </xsl:choose> </xsl:template> </xsl:stylesheet> Christopher Hansen <chansen1@xxxxxxxxx> 12/16/2004 02:59 PM Please respond to xsl-list@xxxxxxxxxxxxxxxxxxxxxx To xsl-list@xxxxxxxxxxxxxxxxxxxxxx cc Subject [xsl] duplicate occurances within strings If i have a variable $thestring containing the following string: "Hello, Hello, Hello, test, dog, cat, cat" Is there a way to use the string-compare function to parse it and check for duplicates within the string, and then possibly remove those extra occurrances...resulting in the string "Hello, test, dog, cat" Thanks Chris
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] duplicate occurances with, Geert Josten | Thread | Re: [xsl] duplicate occurances with, Christopher Hansen |
[xsl] XSL 1.1 second WD is publishe, W. Eliot Kimber | Date | Re: [xsl] Accessing a Java Object a, Marian Olteanu |
Month |