检查每个元素序列

时间:2017-06-15 08:01:17

标签: xslt xslt-2.0

如果属性currencyID的值应始终具有相同的值,我需要检查<Record>的每次出现。如果其中一个属性具有不同的值,则应输出&#39; 1&#39;的值。在新元素<Value>其他&#39; 0&#39;。我的XSLT是这样的:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" version="1.0"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>
<xsl:template match="Amount">
    <Value>
       <xsl:value-of select="if (not((./@currencyID)[1] != ./@currencyID)) then '1' else '0'"/>
    </Value>
</xsl:template>
</xsl:stylesheet>

我的xml文件是:

<Data>
<Record>
    <Amount currencyID="EUR">1.00</Amount>
    <ID>111</ID>
</Record>
<Record>
    <Amount currencyID="EUR">2.00</Amount>
    <ID>222</ID>
</Record>
<Record>
    <Amount currencyID="GBP">3.00</Amount>
    <ID>333</ID>
</Record>
</Data>

生成的输出:

<Data>
<Record>
    <Value>1</Value>
    <ID>111</ID>
</Record>
<Record>
    <Value>1</Value>
    <ID>222</ID>
</Record>
<Record>
    <Value>1</Value>
    <ID>333</ID>
</Record>
</Data>

生成的输出是正确的,但是,如果我将第3次出现的currencyID值更改为&#39; EUR&#39;,则生成的值应为&#39; 0&#39;。但是,目前我得到了相同的输出。我的病情有问题吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

您可以做的是使用全局变量来检查所有货币是否相同,然后只使用该输出值。

试试这个XSLT

{{1}}