Using xsl:variable to set another variable using xsl:choose -> Invalid 属性
Using xsl:variable to set another variable using 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">
错误信息是:
Invalid property value encountered in 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">
有什么想法吗?
使用 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”中,xsl:when
和 xsl:otherwise
上还有一个 select
属性:http://saxonica.com/html/documentation/extensions/xslt-syntax-extensions.html .所以你可以写 <xsl:when test="position() mod 2 = 1" select="$rgbHellBlauGrau"/>
.
我正在尝试定义一些标准颜色以在 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">
错误信息是:
Invalid property value encountered in 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">
有什么想法吗?
使用 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”中,xsl:when
和 xsl:otherwise
上还有一个 select
属性:http://saxonica.com/html/documentation/extensions/xslt-syntax-extensions.html .所以你可以写 <xsl:when test="position() mod 2 = 1" select="$rgbHellBlauGrau"/>
.