如何比较XSLT中两个节点的值

时间:2018-04-20 09:39:05

标签: xslt

我知道这可能是重复的,但无论如何我都会尝试:)

我有一个XML文件,我可以从中获取条件值。 XML文件如下所示:

<root>
<test>
    <criteria nom="DR">
        <abbr>DR</abbr>
        <value>0.123456</value>
    </criteria>
    <criteria nom="MOTA">
        <abbr>MOTA</abbr>
        <value>0.132465</value>
    </criteria>
    </criteria>
</test>
<test>
    <criteria nom="DR">
        <abbr>DR</abbr>
        <value>0.655425</value>
    </criteria>
    <criteria nom="MOTA">
        <abbr>MOTA</abbr>
        <value>0.766545</value>
    </criteria>
</test>
</root>

我试图比较字段<value>。 现在我试着这样做:

<xsl:variable name="pos" select="position()" />
<xsl:for-each select="/root/test[$pos]/criteria/value">
    <xsl:if test="/root/test[$pos-1]/criteria/value/text() &lt; /root/test[$pos]/criteria/value/text()">
        <td class = "GOOD"><xsl:value-of select="text()"/></td>
    </xsl:if>
    <xsl:if test="/root/test[$pos-1]/criteria/value/text() &gt; /root/test[$pos]/criteria/value/text()">
        <td class = "BAD"><xsl:value-of select="text()"/></td>
    </xsl:if>
</xsl:for-each>

但这不是正确的做法。 我怎样才能达到这个效果?

1 个答案:

答案 0 :(得分:1)

假设当前元素是value,这是一种非常优雅的引用方式 前往&#34;之前&#34; value(在当前test元素内)是:

select="../preceding-sibling::*[1]/value"

有关工作示例,请参阅http://xsltransform.net/93nvfcY

请注意,您的源XML在每个test元素中只包含一个criteria 具有前一个兄弟的元素,所以为了减少目的我扩展了它 通过第一个criteria中的其他test元素。

访问上述页面并尝试更改value的值 源XML窗格中的元素。