Создавая сообщение об ошибке в переменной, я заметил странность. Я ожидал, что все 3 приведенных ниже примера будут работать — я использую Saxon 9.8EE.
Это отлично работает:
<xsl:variable name="error" select="'Error reading: ' || $file"/>
Так же и это:
<xsl:variable name="error"><text>Error reading: {$file}</text></xsl:variable>
Но это отображает {$file} как литеральную строку, а не значение $file:
<xsl:variable name="error">Error reading: {$file}</xsl:variable>
Вариант использования находится в другом блоке, чтобы поймать неудачное чтение файла:
<xsl:otherwise>
<xsl:variable name="error" select="'Error reading: ' || $file"/>
<xsl:message>{$error}</xsl:message>
{$error}
</xsl:otherwise>
Является ли встроенный текстовый элемент обязательным? Почему это не нужно для элемента сообщения?