1

我有以下 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' 评估为真?

4

1 回答 1

2

您正在迭代您的 XML 中只有一个的ProductVariant 。当您执行xsl:if条件时,您所测试的只是当前ProductVariant下是否有任何项目具有匹配的VariantType。在你的情况下,有。但是当您执行xsl:value-of时,它将输出第一的值,无论它是否与变体类型匹配。

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

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

(尽管这毫无意义,因为您知道 VariantType 与 ChosenVariantType 匹配)。

或者您可能需要在这里迭代项目元素?

<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>
于 2013-02-14T14:31:28.767 回答