2013-02-14 8 views
1

j'ai une données XML suivantes:Itérer et comparer une valeur avec d'autres

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

et que j'ai une transformation 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> 

qui imprime: 1-2

donc la question est pourquoi "si" évalue comme vrai si VariantType est 1 et ChosenVariantType est 2?

Répondre

2

Vous parcourez ProductVariant dont il n'existe qu'un seul fichier XML. Lorsque vous faites votre xsl: si état, sous la actuelle tout ce que vous testez est de savoir s'il y a un élément ProductVariant avec un correspondant VariantType. Dans votre cas, il y a. Mais quand vous faites le xsl: valeur-de, il va ouptut la valeur du premier article, si elle correspond au type de variante ou non.

Vous pouvez soit vous changez xsl: value-of à ceci:

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

(Bien que ce soit plutôt inutile parce que vous savez les matches VariantType ChosenVariantType).

Ou peut-être vous avez besoin de itérer sur élément éléments ici?

<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> 
+0

thnx beaucoup .. c'est ma deuxième question ici .. et vous avez répondu à eux deux! – user994612

Questions connexes