Использование xsl: variable для установки другой переменной с помощью xsl:choose -> Invalid property
Я пытаюсь определить некоторые стандартные цвета для использования в другом месте 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 ответ
С 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"/>
.