0

我正在尝试定义一些标准颜色以在 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">

有任何想法吗?

4

1 回答 1

0

使用 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>.

在目前在 Saxon 10 PE 或 EE 中作为扩展进行试验的“XSLT 4”中,还有一个select属性 onxsl:whenxsl:otherwisehttp ://saxonica.com/html/documentation/extensions/xslt-syntax-extensions.html 。所以你可以在那里写<xsl:when test="position() mod 2 = 1" select="$rgbHellBlauGrau"/>

于 2020-08-02T08:33:01.413 回答