在我的 xsl 中,我想match
在几个节点上,然后将匹配节点的值抓取到一个变量中。我怎样才能做到这一点?
我需要在下面放置一个通配符变量Budget0
:
<xsl:template match="FieldRef[@Name='Budget0' or @Name='Scope' or @Name='Risk' or @Name='Schedule']" mode="body">
<xsl:param name="thisNode" select="."/>
<xsl:variable name="currentValue" select="$thisNode/Budget0" />
<xsl:variable name="statusRating1">(1)</xsl:variable>
<xsl:variable name="statusRating2">(2)</xsl:variable>
<xsl:variable name="statusRating3">(3)</xsl:variable>
<xsl:choose>
<xsl:when test="contains($currentValue, $statusRating1)">
<span class="statusRatingX statusRating1"></span>
</xsl:when>
<xsl:when test="contains($currentValue, $statusRating2)">
<span class="statusRatingX statusRating2"></span>
</xsl:when>
<xsl:when test="contains($currentValue, $statusRating3)">
<span class="statusRatingX statusRating3"></span>
</xsl:when>
<xsl:otherwise>
<span class="statusRatingN"><xsl:value-of select="$currentValue" /></span>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
在这个片段中,xsl:template match...
效果很好;它似乎与这些领域相匹配。我可以在 Firebug 中看到这些字段statusRating1
像它们应该的那样接收 css 类(因为它们都设置为接收Budget0
字段的值。
[更新]
我发现如果我将它用于变量:
<xsl:variable name="currentValue" select="current()/@Name" />
或者
<xsl:variable name="currentValue" select="FieldRef[@Name=current()/@Name"] />
它将被标记在otherwise
标签中,并打印该字段的名称。换句话说,html打印
<span class="statusRatingN">Budget0</span>
如果我尝试 Dimitre 的任何解决方案(如下),它永远不会在任何子句中匹配when
,并且 html 会像这样输出(注意 span 的文本是空白的):
<span class="statusRatingN"></span>
因此,我推断$currentValue
只是获取属性的名称,而不是指节点的值。我需要参考那个特定节点的值。