我有以下XSLT段可以正常工作。它根据@status varibale生成具有给定颜色的元素。
问题在于它非常不优雅。我在每个xsl:when section重复相同的值。
<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只选择更新颜色属性?
提前致谢...
答案 0 :(得分:3)
您可以移动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>
答案 1 :(得分: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>