0

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

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

现在我需要包含撇号 (')。当我尝试在 AllowedSymbols 中包含相同的内容时,出现错误。

现在的输出是D AGOSTINO。我需要像D'AGOSTINO这样的东西。

不知道如何处理。有人可以帮我解决这个问题。谢谢

4

2 回答 2

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到字符类中。

于 2018-01-24T18:24:15.940 回答
0
  • 将其编码为&apos;&#8217;也)
  • 将值包含在 CDATA 部分中(建议在您摆脱编码问题时使用。

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

于 2018-01-24T19:02:54.243 回答