4

我有以下工作正常的 XSLT 段。它根据@status 变量生成具有给定颜色的元素。

问题是它非常不雅。我在每个 xsl:when 部分重复相同的值。

<xsl:template match="Task">
       <xsl:choose>
        <xsl:when test="@status = 'Completed'">
         <task name="{@title}"  processId="{@resourceId}" start="{@start}" end="{@end}" Id="{@id}"  color="006d0f" borderColor="E1E1E1"  />
        </xsl:when>
        <xsl:when test="@status = 'Failed'">
         <task name="{@title}"   processId="{@resourceId}" start="{@start}" end="{@end}" Id="{@id}"  color="FF0000" borderColor="E1E1E1"  />
        </xsl:when>
         <xsl:when test="@status = 'Risk'">
         <task name="{@title}"  processId="{@resourceId}" start="{@start}" end="{@end}" Id="{@id}"  color="FF9900" borderColor="E1E1E1"  />
        </xsl:when>
           <xsl:when test="@status = 'OnGoing'">
         <task name="{@title}"  processId="{@resourceId}" start="{@start}" end="{@end}" Id="{@id}" color="14f824" borderColor="E1E1E1"  />
        </xsl:when>
        <xsl:otherwise>
            <task name="{@title}" processId="{@resourceId}" start="{@start}" end="{@end}" Id="{@id}"  color="e8e8e8" borderColor="E1E1E1"  />
        </xsl:otherwise>
      </xsl:choose>
  </xsl:template>

如您所见,唯一改变的是颜色属性。

有没有办法让我拥有一个任务元素并让 xsl:choose 只更新颜色属性?

提前致谢...

4

2 回答 2

4

您可以移动元素choose内部task,并使用以下命令创建一个属性节点<xsl:attribute>

  <task name="{@title}"  processId="{@resourceId}" start="{@start}" end="{@end}" Id="{@id}" borderColor="E1E1E1">
   <xsl:choose>
    <xsl:when test="@status = 'Completed'">
     <xsl:attribute name="color">006d0f</xsl:attribute>
    </xsl:when>
    <xsl:when test="@status = 'Failed'">
     <xsl:attribute name="color">FF0000</xsl:attribute>
    </xsl:when>
     <xsl:when test="@status = 'Risk'">
     <xsl:attribute name="color">FF9900</xsl:attribute>
    </xsl:when>
    <!-- etc. etc. -->
  </xsl:choose>
 </task>
于 2013-07-25T11:07:15.117 回答
3

更好的是:

<task name="{@title}"  processId="{@resourceId}" start="{@start}" end="{@end}" Id="{@id}" borderColor="E1E1E1">
  <xsl:attribute name="color">
   <xsl:choose>
    <xsl:when test="@status = 'Completed'">006d0f</xsl:when>
    <xsl:when test="@status = 'Failed'">FF0000</xsl:when>
    <xsl:when test="@status = 'Risk'">FF9900</xsl:when>
    <!-- etc. etc. -->
  </xsl:choose>
 </xsl:attribute>
</task>
于 2013-07-25T14:07:55.240 回答