Search code examples
xsltxpathxsdxslt-2.0workday-api

I would like to include apostrophe in the output attributes


I wrote a code to eradicate all the special characters with a function.

<xsl:function name="lancet:stripSpecialChars">
<xsl:param name="string" />
<xsl:variable name="AllowedSymbols" 
select="'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'"/>
<xsl:value-of select="
translate(
$string,
translate($string, $AllowedSymbols, ' '),
' ')
"/>
</xsl:function> 

<xsd:element xtt:fixedLength="14" xtt:required="true" xtt:severity="error" xtt:align="left">
            <xsl:value-of select="lancet:stripSpecialChars(upper-case(replace(normalize-unicode(translate($emp/wd:First_Name, ',', ' '), 'NFKD'), '⁄', '/')))"/>
        </xsd:element>

Now there is a requirement for me to include apostrophe ('). When I am trying to include the same in AllowedSymbols, I am getting an error.

The output Right now is D AGOSTINO. I need something like D'AGOSTINO.

Not sure how to handle this. Could someone please help me out with this. Thanks


Solution

  • You don't say what the error is, but you probably just need to escape the apostrophe in your variable.

    This is done by doubling up the apostrophe:

    <xsl:variable name="AllowedSymbols" select="'''ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'"/>
    

    Since you're using XSLT 2.0, you should be able to use replace() instead of translate()...

    <xsl:function name="lancet:stripSpecialChars">
      <xsl:param name="string"/>
      <xsl:value-of select="replace($string,'[^A-Z0-9'']','')"/>
    </xsl:function>
    

    I'm not replacing lowercase letters since the string you're passing is already forced to uppercase, but if you use the function elsewhere you can add a-z to the character class.