Шаблоны текстовых значений и xsl:variable

Создавая сообщение об ошибке в переменной, я заметил странность. Я ожидал, что все 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>

Является ли встроенный текстовый элемент обязательным? Почему это не нужно для элемента сообщения?


person Phil    schedule 17.04.2018    source источник
comment
Это не обязательно, но пустое сообщение довольно бесполезно.   -  person zx485    schedule 17.04.2018


Ответы (1)


Это ошибка. Пожалуйста, следите за системой отслеживания ошибок

https://saxonica.plan.io/issues/3748

чтобы довести его до разрешения.

В качестве обходного пути добавьте атрибут as="xs:string". На самом деле, это, вероятно, хорошая идея добавить это в любом случае, поскольку переменная почти наверняка предназначена для использования в качестве строки (а не в качестве узла документа, содержащего один дочерний текстовый узел, который вы получаете без атрибута «как» ).

person Michael Kay    schedule 17.04.2018