Вам может потребоваться создать их как отдельные переменные для экранирования XML.
<xsl:variable name="singleQuote" select='"'"' />
<xsl:variable name="doubleQuote" select="'"'" />
Сделав это, вы можете конкатить все вместе
<xsl:variable name="vAllowedSymbols2"
select="concat($vAllowedSymbols, $singleQuote, $doubleQuote)" />
Это происходит потому, что расширение сущности XML происходит до того, как все достигнет процессора XSLT, поэтому в минимальном случае
<xsl:variable name="invalid" select="'''" />
значение @select расширяется, и механизм XSLT видит атрибут (name = {}select
, value = '''
) и не знает, что он получен из расширения сущности; он просто знает, что три одинарные кавычки не создают правильное выражение XPath.