如何将双引号和单引号放在AllowedSymbols变量的值中以在XSLT Translation中使用

时间:2018-11-16 21:05:04

标签: xslt-1.0

使用XSLT 1.0,在下面的XLST模板中,我想将单引号和双引号添加到允许值列表中。 vAllowedSymbols2出现错误,提示“字符串文字未关闭”。

    <xsl:template name="CleanAlphaField">
       <xsl:param name="inputText" />
       <xsl:param name="maxLength" />
       <xsl:variable name="vAllowedSymbols2" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890 !@$%()+-_,.;:=[]{}\?&quot;&apos;'"/>
       <xsl:variable name="vAllowedSymbols" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890 !@$%()+-_,.;:=[]{}\?'"/>
       <xsl:variable name="truncatedInputText" select="substring($inputText,1,$maxLength)" />
       <!-- return the revised string     -->
       <xsl:value-of select="translate($truncatedInputText,translate($truncatedInputText, $vAllowedSymbols, ''),'')"/>
  </xsl:template>

2 个答案:

答案 0 :(得分:1)

出于XML转义的原因,您可能需要将它们创建为单独的变量。

<xsl:variable name="singleQuote" select='"&apos;"' />
<xsl:variable name="doubleQuote" select="'&quot;'" />

完成此操作后,您可以concat一起使用

<xsl:variable name="vAllowedSymbols2"
              select="concat($vAllowedSymbols, $singleQuote, $doubleQuote)" />

之所以发生这种情况,是因为XML实体扩展发生在事物到达XSLT处理器之前,因此在最小的情况下

<xsl:variable name="invalid" select="'&apos;'" />

@select的值被扩展,XSLT引擎看到一个属性(名称= {{}select,值= '''),并且不知道它来自实体扩展。它只知道三个单引号不能构成有效的XPath表达式。

答案 1 :(得分:1)

您可以简单地做:

<xsl:variable name="vAllowedSymbols2">ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890 !@$%()+-_,.;:=[]{}\?"'</xsl:variable>