XML Editor
Sign up for a WebBoard account Sign Up Keyword Search Search More Options... Options
Chat Rooms Chat Help Help News News Log in to WebBoard Log in Not Logged in
Show tree view Topic
Topic Page 1 2 3 4 5 6 7 8 9 Go to previous topicPrev TopicGo to next topicNext Topic
Postnext
roberto azzimontiSubject: String in a range
Author: roberto azzimonti
Date: 03 Jun 2008 12:42 PM
Originally Posted: 03 Jun 2008 08:58 AM
hi all,

what's the best practice to check if a string is in a given range of possible values (i.e.: nin=10 max=zzzz)?

I'm currently using a series of calls to the following template:
However it doesn't give us the "natural" comparison result i.e. "10" is less than "5", we want "10" greater than "5".

thanks

<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>

Postnext
James DurningSubject: String in a range
Author: James Durning
Date: 03 Jun 2008 01:53 PM
Originally Posted: 03 Jun 2008 01:52 PM
If you want to force it to be a string, try concatenating the same string to the front of both of them before comparing, eg. add a "a" in front.

Postnext
roberto azzimontiSubject: String in a range
Author: roberto azzimonti
Date: 03 Jun 2008 02:05 PM
I think we need to make them right justified pattern with spaces or some common char.
'000005' and '000010' this will work.
'a5' and 'a10' will give me the same wrong result. 'a10' is still less than 'a5'.

I was hoping to find some already made functions especially using the schemas-microsoft-com estension.

thanks

Postnext
James DurningSubject: String in a range
Author: James Durning
Date: 09 Jun 2008 01:33 PM
Originally Posted: 09 Jun 2008 01:32 PM
Sorry, I misinterpreted and was solving for the reverse problem.
Have you noticed that your test uses equals, as opposed to &lt;

Otherwise, cast each value to a number.
<xsl:variable name="num1">
<xsl:number value="$str1"/>
</xsl:variable>
<xsl:variable name="num2">
<xsl:number value="msxsl:node-set($sortedPair)/*[1]"/>
</xsl:variable>

<xsl:when test="$num1 = $num2">
<xsl:text>equals</xsl:text>
</xsl:when>
<xsl:when test="$num1 &lt; $num2">
<xsl:text>less than</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>greater than</xsl:text>
</xsl:otherwise>

Posttop
roberto azzimontiSubject: String in a range
Author: roberto azzimonti
Date: 09 Jun 2008 01:55 PM
I didn't realize that, thank you James.

 
Topic Page 1 2 3 4 5 6 7 8 9 Go to previous topicPrev TopicGo to next topicNext Topic
Download A Free Trial of Stylus Studio 6 XML Professional Edition Today! Powered by Stylus Studio, the world's leading XML IDE for XML, XSLT, XQuery, XML Schema, DTD, XPath, WSDL, XHTML, SQL/XML, and XML Mapping!  
go

Log In Options

Site Map | Privacy Policy | Terms of Use | Trademarks
Stylus Scoop XML Newsletter:
W3C Member
Stylus Studio® and DataDirect XQuery ™are from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2016 All Rights Reserved.