xsl-list
[Top] [All Lists]

Re: match string

2004-10-19 05:27:16
Maybe I have found a solution. It works, at least with libxslt.
is this correct? I think is is rather a hack.

<!--Select the first paragraph of all chapters-->
<xsl:template match="//chapter/section[1]/para[1]" priority="1">
        <xsl:call-template name="first_line">
                <xsl:with-param name="string" select="."/>
        </xsl:call-template>
</xsl:template>



<!--Select all other paragraphs-->
<xsl:template match="//para">
        <xsl:call-template name="para.template">
        </xsl:call-template>
</xsl:template>



<xsl:template name="first_line">
        <xsl:param name="string"/>
        <xsl:param name="string2"/>
        <xsl:param name="string3"/>
                <xsl:choose>
                
                        <!--are there any spaces???-->
                        <xsl:when test="contains($string, ' ')">
                                <div>
                                    <b>
                                                <!--1st word-->
                                                <xsl:value-of 
select="substring-before($string,' ')"/>
                                                <!--give back the space-->
                                            <xsl:text> </xsl:text>
                                                
                                                <!--2nd word-->
<xsl:value-of select="substring-before( substring-after ($string, ' '), ' ')"/>
                                                <!--give back the space-->
                                        <xsl:text> </xsl:text>
                                                
                                                <!--3rd word-->
<xsl:value-of select="substring-before( substring-after ( substring-after ($string, ' '), ' '),' ')"/>
                                                <!--give back the space-->
                                        <xsl:text> </xsl:text>
                                        </b>
                                </div>
                        </xsl:when>

                        <xsl:otherwise>
                                <xsl:call-template name="para.template">
                                </xsl:call-template>
                        </xsl:otherwise>

  </xsl:choose>
</xsl:template>







On Oct 19, 2004, at 12:12 PM, Anton Triest wrote:

Hmmm... just after posting, I realized it's probably safer to use "normalize-space(.)", to ignore any leading whitespace:

   <xsl:param name="split" select="3"/>
   <xsl:template match="para">
       <para><xsl:call-template name="splitwords"/></para>
   </xsl:template>
   <xsl:template name="splitwords">
       <xsl:param name="i" select="0"/>
       <xsl:param name="str1" select="''"/>
       <xsl:param name="str2" select="normalize-space(.)"/>
       <xsl:choose>
           <xsl:when test="$i = $split">
               <b><xsl:value-of select="$str1"/></b>
               <xsl:value-of select="$str2"/>
           </xsl:when>
           <xsl:otherwise>
               <xsl:choose>
                   <xsl:when test="contains($str2,' ')">
                       <xsl:call-template name="splitwords">
                           <xsl:with-param name="i" select="$i+1"/>
<xsl:with-param name="str1" select="concat($str1,substring-before($str2,' '),' ')"/> <xsl:with-param name="str2" select="substring-after($str2,' ')"/>
                       </xsl:call-template>
                   </xsl:when>
                   <xsl:otherwise>
                       <xsl:call-template name="splitwords">
                           <xsl:with-param name="i" select="$split"/>
<xsl:with-param name="str1" select="concat($str1,$str2)"/>
                           <xsl:with-param name="str2" select="''"/>
                       </xsl:call-template>
                   </xsl:otherwise>
               </xsl:choose>
           </xsl:otherwise>
       </xsl:choose>
   </xsl:template>



Anton

--+------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--+--




<Prev in Thread] Current Thread [Next in Thread>