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

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()) =
   count(current()/ancestor::p//text())])]">

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

Not foolproof, but

match="text()[starts-with(ancestor::p,.)]"

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

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

Cheers,
Wendell

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)

So:

<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)"/>
</xsl:template>

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

Cheers,
Wendell

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:

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

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

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


======================================================================
Wendell Piez                            mailto:wapiez@xxxxxxxxxxxxxxxx
Mulberry Technologies, Inc.                http://www.mulberrytech.com
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: http://www.mulberrytech.com/xsl/xsl-list


Current Thread