用于XML到HTML转换的XSL:根据xml数据值是正数还是负数
对颜色进行着色我的XML文件。
<roots>
<root>
<text1>increased by</text1>
<value1>10</value1>
<text2>decreased by<text2>
<value2>-7</value2>
</root>
</roots>
预期的HTML输出:
increased by 10 --(value 10 in green color)
decreased by -7 -- (value -7 in red color)
我尝试以下方式实现XSLT ......
<xsl:template match="value1">
<xsl:if test="value1 >= 0">
<font color="green"><xsl:apply-templates/>/></font>
</xsl:if>
</xsl:template>
<xsl:template match="value1">
<xsl:if test="value1 < 0">
<font color="red"><xsl:apply-templates/>/></font>
</xsl:if>
</xsl:template>
答案 0 :(得分:1)
你有两个模板具有完全相同的匹配模式 - 这不会起作用。为每个模板使用不同的匹配模式,例如:
<xsl:template match="value1[. >= 0]">
和
<xsl:template match="value1[. < 0]">
或使用xsl:choose
的单个模板选择颜色。
另请注意,您有几个语法错误,例如<xsl:apply-templates/>/>
(标记的双重关闭)或尝试使用未转义的<
字符作为比较运算符。
如果正如您所说,您的XML确实包含编号节点(text1,text2,value1,value2等),那么您必须更改匹配模式以解决该问题。否则,您需要与输入中的值一样多的模板(如果您需要单独的模板用于正值和负值,则需要两倍)。
例如,对两种情况使用单个模板,使用xsl:choose
选择颜色:
<xsl:template match="*[starts-with(name(), 'value')]">
<xsl:variable name="color">
<xsl:choose>
<xsl:when test=". >= 0">green</xsl:when>
<xsl:otherwise>red</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<font color="{$color}">
<xsl:value-of select="." />
</font>
<br/>
</xsl:template>