html - 用于 XML 到 HTML 转换的 XSL : color the xml data values based on positive or negative

标签 html xml xslt

用于 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>

最佳答案

您有两个匹配模式完全相同的模板 - 这是行不通的。为每个模板使用不同的匹配模式,例如:

<xsl:template match="value1[. >= 0]">

和:

<xsl:template match="value1[. &lt; 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>

关于html - 用于 XML 到 HTML 转换的 XSL : color the xml data values based on positive or negative,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37452527/

相关文章:

html - 响应式设计和显示嵌套列表

javascript - 如何在使用 jquery 单击一次后禁用链接

java - jdk1.4中使用Xpath解析XML文件

java - 如何在android中将SOAP XML转换为Java对象

xml - 如何将具有父/子关系的 XML 导入 Access?

xslt - 添加父元素并重命名子元素

html - 根据浏览器显示不同的颜色

html - 为什么我的 CSS 样式没有被应用?

xml - 使用脚本将文本文件转换为 xml

xslt - 打印从一到一百万的数字