迭代并比较一个值与其他值

时间:2013-02-14 14:12:58

标签: xml xslt xpath

我有以下XML数据:

<Product>
  <item>
   <ProductVariant>
     <item>
        <VariantType>1</VariantType>
     </item>
     <item>
        <VariantType>2</VariantType>
     </item>
     <item>
        <VariantType>3</VariantType>
     </item>
   </ProductVariant>
   <ChosenVariantType>2</ChosenVariantType>
  </item>
</Product>

并且我有一个xsl转换:

<xsl:for-each select="Product/item/ProductVariant">
    <xsl:if test="(item/VariantType = ../ChosenVariantType)">
        <xsl:value-of name="test" select="item/VariantType"/>
        <xsl:text>-</xsl:text>
        <xsl:value-of name="testChosen" select="../ChosenVariantType"/>
    </xsl:if>   
</xsl:for-each>
打印出来的

:1-2

所以问题是为什么如果VariantType为1且ChosenVariantType为2,'if'的计算结果为真?

1 个答案:

答案 0 :(得分:2)

您正在迭代 ProductVariant ,其中XML中只有一个。当您执行 xsl:if 条件时,您正在测试的是当前 ProductVariant 下是否有且匹配不定型别即可。在你的情况下,有。但是,当您执行 xsl:value-of 时,它将会输出第一个的值,无论它是否与变体类型匹配。

您可以将 xsl:value-of 更改为:

<xsl:value-of name="test" select="item[VariantType = ../ChosenVariantType]/VariantType"/>

(虽然这是毫无意义的,因为你知道VariantType匹配ChosenVariantType)。

或许你需要在这里迭代 item 元素?

<xsl:for-each select="Product/item/ProductVariant/item">
    <xsl:if test="(VariantType = ../../ChosenVariantType)">
        <xsl:value-of name="test" select="VariantType"/>
        <xsl:text>-</xsl:text>
        <xsl:value-of name="testChosen" select="../../ChosenVariantType"/>
    </xsl:if>   
</xsl:for-each>