This stylesheet:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="text/text()" name="FirstLetterAndNumber">
<xsl:param name="string" select="concat(normalize-space(translate(.,',.()`','')),' ')"/>
<xsl:if test="$string != ''">
<xsl:variable name="word" select="substring-before($string,' ')"/>
<xsl:choose>
<xsl:when test="number($word)=number($word)">
<xsl:value-of select="$word"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="substring($word,1,1)"/>
</xsl:otherwise>
</xsl:choose>
<xsl:call-template name="FirstLetterAndNumber">
<xsl:with-param name="string" select="substring-after($string,' ')"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
With this input:
<root>
<text>`ABC HBO ORACLE 123 (Hello Person)`</text>
<text>`ABC HBO ORACLE123 (Hello Person)`</text>
<text>`ABC 123 (Hello Person)`</text>
</root>
Result:
<root>
<text>AHO123HP</text>
<text>AHOHP</text>
<text>A123HP</text>
</root>
Note: If you don't know in advance the special character to strip, you should do:
<xsl:param name="string"
select="concat(
normalize-space(
translate(.,
translate(.,
' qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890',
''),
'')),' ')"/>