|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: duplicate occurances within strings
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
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
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|

Cart








