2016-08-16 3 views
1

In meinem Stylesheet habe ich eine xsl: Variable, die in das XML schaut, eine Liste von Objekten betrachtet und die Summe des Preiswertes von jedem Objekt zurückgibt, mein Code dafür exampled ist unten:Ausschließen bestimmter Werte aus einer xsl: sum Gleichung

<xsl:variable name="ExampleTotal"> 
     <xsl:value-of select="sum(/ListOfObjects/Object/PriceOfObject)"/> 
    </xsl:variable> 

Und das funktioniert gut, Mein Problem ist, dass ich nicht brauchen, um die Summe von jeder eines dieser Objekte in der Liste, nur diejenigen, die einen Wert des Seins enthalten wahr.

Beispiel XML:

<ListOfObjects> 
    <Object> 
    <PriceOfObject>35.00</PriceOfObject> 
    <PriceNeeded>true</PriceNeeded> 
    <OtherData>example</OtherData> 
    </Object> 
    <Object> 
    <PriceOfObject>36.00</PriceOfObject> 
    <PriceNeeded>true</PriceNeeded> 
    <OtherData>example</OtherData> 
    </Object> 
    <Object> 
    <PriceOfObject>35.00</PriceOfObject> 
    <PriceNeeded>true</PriceNeeded> 
    <OtherData>example</OtherData> 
    </Object> 
    <Object> 
    <PriceOfObject>33.00</PriceOfObject> 
    <PriceNeeded>false</PriceNeeded> 
    <OtherData>example</OtherData> 
</Object> 
</ListOfObjects> 

ist es möglich, durch die Liste der Objekte zu betrachten und nur die Summe der Einsen zusammenzufassen, die den Wert als wahr haben?

Antwort

1

Try this:

<xsl:variable name="ExampleTotal"> 
    <xsl:value-of select="sum(/ListOfObjects/Object[PriceNeeded='true']/PriceOfObject)"/> 
</xsl:variable> 

Above Code wie von Michael Kay vorgeschlagen geändert,

<xsl:variable name="ExampleTotal" 
    select="sum(/ListOfO‌​bjects/Object[PriceNe‌​eded='true']/PriceOfO‌​bject)"/> 
+0

Erstaunlich, danke! – JakeGilesPhillips

+1

Noch besser wäre ''. Es ist hier nicht notwendig, dass der redundante Code die numerische Summe in ein Ergebnisbaumfragment umwandelt, da er fast sicher wieder in eine Zahl umgewandelt wird, wenn er verwendet wird. –

Verwandte Themen