我有以下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'的计算结果为真?
答案 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>