[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
[xsl] Re: comparing strings
Subject: [xsl] Re: comparing strings From: Dimitre Novatchev <dnovatchev@xxxxxxxxx> Date: Tue, 2 Jan 2001 04:27:01 -0800 (PST) |
Hi Oliver, Here's a solution that does not limit the two strings to contain only Latin characters. It can be further parameterised to accept as parameters any of the useful <xsl:sort> attributes. Let's not forget that there are different rules for comparing characters in different languages and there isn't an universal rule for character comparison. I guess this fact was one of the reasons not to provide (inequality) string comparison operators in XPath. The node-set() extension function has to be used -- however it will be standard in XSLT 1.1. The example stylesheet below calls the template named "stringCompare" with the following parameters: str1 = 'Paris' str2 = 'London' The result is: 'Paris' is greater than 'London' Dimitre Novatchev. stringCompare.xsl: ----------------- <xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl="urn:schemas-microsoft-com:xslt" > <xsl:output method="text"/> <xsl:template match="/"> <xsl:text>'Paris'</xsl:text> <xsl:text> is</xsl:text> <xsl:call-template name="stringCompare"> <xsl:with-param name="str1" select="'Paris'"/> <xsl:with-param name="str2" select="'London'"/> </xsl:call-template> <xsl:text>'London'</xsl:text> </xsl:template> <xsl:template name="stringCompare"> <xsl:param name="str1"/> <xsl:param name="str2"/> <xsl:choose> <xsl:when test="str1=str2"> <xsl:text> equal </xsl:text> </xsl:when> <xsl:otherwise> <xsl:variable name="thePair"> <xsl:element name="str1"> <xsl:value-of select="$str1"/> </xsl:element> <xsl:element name="str2"> <xsl:value-of select="$str2"/> </xsl:element> </xsl:variable> <xsl:variable name="sortedPair"> <xsl:for-each select="msxsl:node-set($thePair)/*"> <xsl:sort select="."/> <xsl:copy-of select="."/> </xsl:for-each> </xsl:variable> <xsl:choose> <xsl:when test="$str1 = msxsl:node-set($sortedPair)/*[1]"> <xsl:text> less than </xsl:text> </xsl:when> <xsl:otherwise> <xsl:text> greater than </xsl:text> </xsl:otherwise> </xsl:choose> </xsl:otherwise> </xsl:choose> </xsl:template> </xsl:stylesheet> result: ------ 'Paris' is greater than 'London' Oliver Becker wrote: Is there someone out there who can answer my simple question: How to compare strings with XPath/XSLT, something like strcmp() in C or compareTo() in Java? I want a pure XSLT solution without using extensions. __________________________________________________ Do You Yahoo!? Yahoo! Photos - Share your holiday photos online! http://photos.yahoo.com/ XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] forcing nbsp; to appear i, Kay Michael | Thread | [xsl] Re: comparing strings, Dimitre Novatchev |
Re: [xsl] comparing strings, Miloslav Nic | Date | HowToCountNodes via MSXML productio, jdgarrett |
Month |
Keywords