This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: comparing strings


You are right.

There is the second, improved version:

<xsl:stylesheet
        version="1.0"
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="xml" indent="yes"/>

<xsl:param name="start">paca</xsl:param>
<xsl:param name="count">5</xsl:param>
<xsl:variable
name="letters">AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz</xsl:variable>

<xsl:template match="/">
  <xsl:call-template name="select">
    <xsl:with-param name="str" select="$start"/>
  </xsl:call-template>
</xsl:template>

<xsl:template name="select">
  <xsl:param name="str"/>
  <xsl:variable name="term" select="//term[starts-with(.,$str)][1]"/>
  
  <xsl:choose>
    <xsl:when test="$term">
      <xsl:apply-templates select="$term"/>
    </xsl:when>
    <xsl:when test="string-length($str)=1">
      <xsl:call-template name="select">
	<xsl:with-param name="str"
select="substring(substring-after($letters,$str),1,1)"/>
      </xsl:call-template>
    </xsl:when>
    <xsl:when test="$str">
      <xsl:call-template name="select">
	<xsl:with-param name="str" select="substring($str,1,string-length($str)
- 1)"/>
      </xsl:call-template>
    </xsl:when>
  </xsl:choose>
</xsl:template>


<xsl:template match="term">
  <xsl:param name="pos" select="1"/>
  <t><xsl:value-of select="."/></t>

  <xsl:if test="$pos &lt; $count">
    <xsl:apply-templates select="following-sibling::term[1]">
      <xsl:with-param name="pos" select="$pos + 1"/>
    </xsl:apply-templates>
  </xsl:if>

</xsl:template>

</xsl:stylesheet>


Jeni Tennison wrote:
> 
> Hi Miloslav,
> 
> > <xsl:template match="/">
> >   <xsl:apply-templates select="//term[starts-with(.,$start)][1]"/>
> > </xsl:template>
> 
> The trouble with this approach is that when the input term is
> something like 'pabulum' (means 'food', apparently), none of the terms
> in the list start with that term.  With the above solution, you'll get
> the beginning of the list, but Oliver stated he wanted the terms that
> follow the input term alphabetically (i.e. wants 'pace' etc. to
> show).
> 
> Cheers,
> 
> Jeni
> 
> ---
> Jeni Tennison
> http://www.jenitennison.com/
> 
>  XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list

-- 
******************************************
<firstName> Miloslav </firstName>    
<surname>   Nic      </surname>     

<mail>    nicmila@idoox.com    </mail>   
<support> http://www.zvon.org  </support>
<zvonMailingList> 
    http://www.zvon.org/index.php?nav_id=4 
</zvonMailingList>

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]