Использование xsl: variable для установки другой переменной с помощью xsl: choose -> Invalid property - PullRequest
0 голосов
/ 02 августа 2020

Я пытаюсь определить некоторые стандартные цвета для использования в другом месте XSLT, но следующее дает ошибку:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" version="2.0">

    <xsl:variable name="rgbWeiss"       >rgb(255, 255, 255)</xsl:variable>
    <xsl:variable name="rgbHellBlauGrau">rgb(213, 235, 229)</xsl:variable>
    <xsl:variable name="rgbDunkelRot"   >rgb(128,   0,   0)</xsl:variable>
    :
    :
    <xsl:template match="row">

        <xsl:variable name="bgcolor">
            <xsl:choose>
                <xsl:when      test="position() mod 2 = 1">rgb(213, 235, 229)</xsl:when>
                <xsl:otherwise                            >${rgbDunkelRot}</xsl:otherwise>
            </xsl:choose>
        </xsl:variable>

        <fo:table-row background-color="{$bgcolor}" xsl:use-attribute-sets="table-row-attr">

Сообщение об ошибке:

Недействительно значение свойства, обнаруженное в background-color = "$ {rgbDunkelRot}"

К сожалению, не было предоставлено никакой полезной информации о местонахождении ошибки.

Однако следующее работает нормально:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" version="2.0">
    :
    :
    <xsl:template match="row">

        <xsl:variable name="bgcolor">
            <xsl:choose>
                <xsl:when      test="position() mod 2 = 1">rgb(213, 235, 229)</xsl:when>
                <xsl:otherwise                            >rgb(128,   0,   0)</xsl:otherwise>
            </xsl:choose>
        </xsl:variable>

        <fo:table-row background-color="{$bgcolor}" xsl:use-attribute-sets="table-row-attr">

Есть идеи?

1 Ответ

0 голосов
/ 02 августа 2020

С XSLT 2 (вы, кажется, используете) я бы просто сделал

<fo:table-row background-color="{if (position() mod 2 = 1) then $rgbHellBlauGrau else $rgbDunkelRot}" xsl:use-attribute-sets="table-row-attr">

или использовал это выражение в переменной

<xsl:variable name="bgcolor" select="if (position() mod 2 = 1) then $rgbHellBlauGrau else $rgbDunkelRot"/>

Внутри xsl:choose/xsl:when/xsl:otherwise у вас есть неправильный синтаксис, вам нужно <xsl:otherwise><xsl:value-of select="$rgbDunkelRot"/></xsl:otherwise> или перейти на XSLT 3 и expand-text="yes", например, <xsl:otherwise>{$rgbDunkelRot}</xsl:otherwise>.

В «XSLT 4», с которым в настоящее время экспериментируют в Saxon 10 PE или EE, в качестве расширения также есть Атрибут select в xsl:when и xsl:otherwise: http://saxonica.com/html/documentation/extensions/xslt-syntax-extensions.html. Так что там можно написать <xsl:when test="position() mod 2 = 1" select="$rgbHellBlauGrau"/>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...