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」がtrueと評価される理由です。

4

1 に答える 1

2

XMLに1つしかない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 に答える