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.
I think that
<xsl:variable name="n"><xsl:number level="any" from="p"/></xsl:variable>
<xsl:choose>
<xsl:when test="$n = 1">...
works reasonably, though it can't be done in the match pattern, except
(in XSLT 2.0) by invoking an xsl:function from the predicate.
Michael Kay
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list