Re: [xsl] Selecting First Letter

Subject: Re: [xsl] Selecting First Letter
From: Wendell Piez <wapiez@xxxxxxxxxxxxxxxx>
Date: Tue, 30 Sep 2003 14:35:57 -0400

I should add -- the harder part is matching the correct text node.

In your case, assuming you want the character in bold to be the initial character inside the p, at any level,

<xsl:template match="text()[not(preceding::text()
  [count(.|current()/ancestor::p//text()) =

would do it, but you can see how horrible that is!

Not foolproof, but


would usually work (and would most probably perform better).

So today's XSLT Challenge is to write a better match for this problem.


At 01:54 PM 9/30/2003, I wrote:
XSLT 1.0 is not really a great string-processing language, which is what you need here, but its string handling is good enough to manage this ... you need the functions

substring($string, $start, $length)

and maybe substring-after($string, $substring)


<xsl:template match="text()">
  <xsl:variable name="initial" select="substring(.,1,1)">
  <b><xsl:value-of select="$initial"/></b>
  <xsl:value-of select="substring-after(.,$initial)"/>

should do it. (The rest would be an identity transform.)


At 01:33 PM 9/30/2003, you wrote:
I would like to be able to select the
first letter of the first text node
within a hierarchy, e.g., the "S" here:

    <p><a href="...">Some</a> Text</p>

and create a new element with that letter
while keeping the rest of the structure
as is, e.g:

    <p><a href="..."><b>S</b>ome</a> Text</p>

Wendell Piez                            mailto:wapiez@xxxxxxxxxxxxxxxx
Mulberry Technologies, Inc.      
17 West Jefferson Street                    Direct Phone: 301/315-9635
Suite 207                                          Phone: 301/315-9631
Rockville, MD  20850                                 Fax: 301/315-8285
  Mulberry Technologies: A Consultancy Specializing in SGML and XML

XSL-List info and archive:

Current Thread