Могу ли я установить атрибуты условно в таблице стилей XSLT? - PullRequest
2 голосов
/ 18 января 2020

Я пытаюсь автоматизировать некоторые преобразования xslt, и мне нужен способ установить атрибуты xsl: output, основанные на содержимом преобразуемых файлов XML.

В частности, я хочу рассмотреть файлы XML, получить атрибут lang из элемента root и установить атрибуты на основе значения lang.

Я пробовал следующее:

<xsl:param name="language">
    <xsl:value-of select="//*/@lang"/>
</xsl:param>

<xsl:output method="xml" xmlns:saxon="http://icl.com/saxon" encoding="utf-8">
    <xsl:choose>
        <xsl:when test="$language != 'ja'">
            <xsl:attribute name="saxon:character-representation"><xsl:value-of select="'native'"/></xsl:attribute>
        </xsl:when>
        <xsl:otherwise>
            <xsl:attribute name="saxon:character-representation"><xsl:value-of select="'hex'"/></xsl:attribute>
        </xsl:otherwise>
    </xsl:choose>
</xsl:output>

.. .но мой анализатор сообщает мне, что элемент xsl: output должен быть пустым.

Есть ли способ сделать что-то подобное в контексте таблицы стилей, или мне придется манипулировать этими атрибутами в более высокий уровень?

1 Ответ

1 голос
/ 18 января 2020

Вы отметили это docbook, и я подозреваю, что вы все еще используете древний процессор Saxon 6.5.5 и его пространство имен http://icl.com/saxon. Однако таблицы стилей docbook можно настроить для работы с современной версией Saxon, которая позволяет динамически выбирать атрибуты сериализации в инструкции xsl:result-document.

Альтернативой является переопределение свойств xsl:output из Java API или командная строка. Однако в вашем случае неудобно, когда вы хотите сделать свойства зависимыми от чего-либо в исходном документе.

...