[xsl] first char of first word of first paragraph

Subject: [xsl] first char of first word of first paragraph
From: Zsolt Szabó <zsolt.szabo@xxxxxxxxxx>
Date: Mon, 18 Oct 2004 16:30:50 +0200
Hi,

I am a newbie in xsl, and I have a problem.

1. What I want to do is to select every first paragraph of all chapters
2. Select the first word with  grep., and then select the rest of the
text


Question> 1. How can I select the first 3 words 2. How can I convert the selected string to uppercase?


Thank you Zsolt Sandor Szabs Graphic Designer




The source xml file. <xml> <chapter id="c1"> <title>chapter 1</title> <setion> <para>Smallcaps word para 1 text etc.</para> <para>para 2 text etc.</para> </setion> </chapter> <chapter id="c2"> <title>chapter 2</title> <setion> <para>Smallcaps word para 1 text etc.</para> <para>para 2 text etc.</para> </setion> </chapter> </xml>

the desired output
<chapter id="c1">
    <setion>
        <para>
            <FirstChar>S</FirstChar><Smallcaps>MALLCAPS WORD PARA 1
</Smallcaps><RestOfPara>text etc.</RestOfPara>
        </para>
    </setion>
</chapter>


---


The following xsltfile works, at least with libxslt.
<!--Select the first paragraph of all chapters-->
<xsl:template match="//chapter/section[1]/para[1]" priority="1">

	<xsl:call-template name="FirstWord">
		<xsl:with-param name="string" select="."/>
	</xsl:call-template>

</xsl:template>

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




<xsl:template name="FirstWord"> <xsl:param name="string"/> <xsl:choose> <!--does the string contains a space???--> <xsl:when test="contains($string,' ')"> <div> <b> <!--select characters before the space--> <xsl:value-of select="substring-before($string,' ')"/> </b> <!--give back the space which was stripped down from the first word--> <xsl:text> </xsl:text> <!--select characters after the space--> <xsl:value-of select="substring-after($string,' ')"/> </div> </xsl:when> <xsl:otherwise> <!--call paragraph template--> <xsl:call-template name="para.template"> </xsl:call-template> </xsl:otherwise> </xsl:choose> </xsl:template>


But how can I do this with grep?


Current Thread