在我的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
只获取属性的名称,而不是指节点的值。我需要引用该特定节点的值。
答案 0 :(得分:1)
使用强>:
<xsl:variable name="currentValue" select="$thisNode/*[name()=current()/@Name]"/>
或者:
<xsl:variable name="currentValue" select="$thisNode/*[name()=$thisNode/@Name]"/>
或者,(最佳):
<xsl:variable name="currentValue" select="*[name()=current()/@Name]"/>
答案 1 :(得分:0)
啊,经过几小时,几小时,几小时,几天和几个月,这是一个例子(我自己摆弄with help from this thread):
这两行是关键(Dimitre的答案很接近):
<xsl:param name="thisNode" select="."/>
<xsl:variable name="currentValue" select="$thisNode/@*[name()=current()/@Name]" />
这是整个函数,它读取两个不同的列并将值应用于其中一个:
<xsl:template match="FieldRef[@Name='YesNo1']|FieldRef[@Name='YesNo2']" mode="body">
<xsl:param name="thisNode" select="."/>
<xsl:variable name="currentValue" select="$thisNode/@*[name()=current()/@Name]" />
<xsl:variable name="yesvalue">Yes</xsl:variable>
<xsl:variable name="novalue">No</xsl:variable>
<xsl:choose>
<xsl:when test="contains($currentValue, $yesvalue)">
<span class="yesno yes"><xsl:value-of select="$currentValue" /></span>
</xsl:when>
<xsl:when test="contains($currentValue, $novalue)">
<span class="yesno no"><xsl:value-of select="$currentValue" /></span>
</xsl:when>
<xsl:otherwise>
<span class="yesnoN"><xsl:value-of select="$currentValue" /></span>
</xsl:otherwise>
</xsl:choose>
</xsl:template>