Как поместить двойные и одинарные кавычки в значение переменной AllowedSymbols для использования в XSLT-переводе - PullRequest
0 голосов
/ 17 ноября 2018

Используя 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 голосов
/ 17 ноября 2018

Вы можете сделать просто:

<xsl:variable name="vAllowedSymbols2">ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890 !@$%()+-_,.;:=[]{}\?"'</xsl:variable>
0 голосов
/ 17 ноября 2018

Вам может потребоваться создать их как отдельные переменные для экранирования XML.

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

Сделав это, вы можете конкатить все вместе

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

Это происходит потому, что расширение сущности XML происходит до того, как все достигнет процессора XSLT, поэтому в минимальном случае

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

значение @select расширяется, и механизм XSLT видит атрибут (name = {}select, value = ''') и не знает, что он получен из расширения сущности; он просто знает, что три одинарные кавычки не создают правильное выражение XPath.

...