I have the following in a stylesheet:
<xsl:function name="local:logicalName">
<xsl:param name="name"/>
<xsl:analyze-string select="$name" regex="_">
<xsl:non-matching-substring>
<xsl:variable name="substring" select="."/>
<xsl:choose>
<xsl:when test="$locals/lookup/words/word[@physical=$substring]">
<xsl:choose>
<xsl:when
test="$locals/lookup/words/word[@physical=$substring and @logical='*']">
<xsl:value-of select="$substring"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of
select="$locals/lookup/words/word[@physical=$substring]/@logical"/>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:when
test="$locals/lookup/words/word[@shortPhysical=$substring]">
<xsl:choose>
<xsl:when
test="$locals/lookup/words/word[@shortPhysical=$substring and
@logical='*']">
<xsl:value-of select="$substring"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of
select="$locals/lookup/words/word[@shortPhysical=$substring]/@logical"/>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="concat(substring(., 1, 1),
lower-case(substring(., 2)))"/>
</xsl:otherwise>
</xsl:choose>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:function>
The $locals document contains reserved words that have special
conversion rules, like this:
<?xml version="1.0"?>
<lookup>
<words>
<word physical="ACCT" shortPhysical="*" comment="*"
logical="Account"/>
...
<word physical="ZIP" shortPhysical="*" comment="*" logical="*"/>
</words>
</lookup>
What I would like it to do is convert
ACCOUNT_TO_GROUP
into
AccountToGroup
via <xsl:value-of select="local:logicalName(@name)"/> but instead it is
putting spaces between the words. I understand that xsl:function is
defined to return a sequence which is what I guess is going on here. I
can use string-join to squish them back together, but is there a way to
output the desired result from the function directly?
Thanks,
Barry