我想在输出属性中包含撇号

时间:2018-01-24 17:58:18

标签: xslt xpath xsd xslt-2.0 workday-api

我写了一个代码来消除所有带有函数的特殊字符。

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

现在要求我加入撇号(&#39;)。当我试图在AllowedSymbols中包含相同内容时,我收到错误。

现在输出 D AGOSTINO 。我需要像 D&#39; AGOSTINO 这样的东西。

不确定如何处理此问题。有人可以帮我解决这个问题。谢谢

2 个答案:

答案 0 :(得分:2)

你不能说出错误是什么,但你可能只需要在变量中转义撇号。

这是通过加倍撇号来完成的:

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

由于您使用的是XSLT 2.0,因此您应该可以使用replace()代替translate() ...

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

我没有替换小写字母,因为您传递的字符串已被强制为大写,但如果您在其他地方使用该函数,则可以将a-z添加到字符类。

答案 1 :(得分:0)

  • 将其编码为&apos;&#8217;也是)
  • 将值包含在CDATA部分中(建议您解决编码问题。

<data><![CDATA[some stuff including D'Agostino & other reserved/problematic characters :-) ]]></data>