我写了一个代码来消除所有带有函数的特殊字符。
<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 这样的东西。
不确定如何处理此问题。有人可以帮我解决这个问题。谢谢
答案 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)
'
(’
也是) <data><![CDATA[some stuff including D'Agostino & other reserved/problematic characters :-) ]]></data>