Wie man die sum() des node-Werte in XSLT
Ich versuche zu berechnen, die Summe der numerischen Knoten. Der folgende code nichts zurückgibt, außer dem HTML. Ich weiß, dass sum() nimmt eine Knotenmenge. Ich denke, ich habe die variable korrekt. Was mache ich falsch.
Dank.
XML-Beispiel:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<container xmlns="http://www.gtech.com/lsp/2009-09-23">
<Root>
<Incentives>
<Date>2015-03-14</Date>
<ID>507200</ID>
<ProgramName>Retailer Cash Incentive 16</ProgramName>
<Retailer>
<ID>507201</ID>
<Name>Acme #2102</Name>
<Detail>
<CashPaymentsToday>50.00</CashPaymentsToday>
<Potential>0</Potential>
</Detail>
</Retailer>
<Retailer>
<ID>507202</ID>
<Name>Acme #2103</Name>
<Detail>
<CashPaymentsToday>60.00</CashPaymentsToday>
<Potential>0</Potential>
</Detail>
</Retailer>
<Retailer>
<ID>507203</ID>
<Name>Acme #1008</Name>
<Detail>
<CashPaymentsToday>0.00</CashPaymentsToday>
<Potential>0</Potential>
</Detail>
</Retailer>
<Retailer>
<ID>507207</ID>
<Name>Acme #2228</Name>
<Detail>
<CashPaymentsToday>200.00</CashPaymentsToday>
<Potential>3</Potential>
</Detail>
</Retailer>
<Retailer>
<ID>598419</ID>
<Name>Acme NO 1071</Name>
<Detail>
<CashPaymentsToday>NONQUAL</CashPaymentsToday>
<Potential>NONQUAL</Potential>
</Detail>
</Retailer>
<Retailer>
<ID>598421</ID>
<Name>Acme NO 1072</Name>
<Detail>
<CashPaymentsToday>NONQUAL</CashPaymentsToday>
<Potential>NONQUAL</Potential>
</Detail>
</Retailer>
</Incentives>
</Root>
</container>
XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<xsl:variable name="cashPayments">
<xsl:for-each select="//Detail">
<xsl:if test="CashPaymentsToday"/>
</xsl:for-each>
</xsl:variable>
<xsl:value-of select="sum($cashPayments)"/>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
InformationsquelleAutor lslep | 2015-04-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zuerst, Ihre Eingabe-Dokument enthält ein Standard-namespace:
dass Sie brauchen, um zu berücksichtigen, d.h. redeclare in der stylesheet-und Präfix-Elemente, wenn auf die Eingabe-Dokument.
Dann gibt es absolut keine Notwendigkeit zu konstruieren, die eine variable, wenn Sie direkt die Summe der Knoten, die Sie interessiert sind - aber einige der
CashPaymentsToday
Elemente nicht enthalten Anzahl:Müssen Sie ausschließen dieser Elemente von der Summe. Endlich, was Sie derzeit tun, ist nicht möglich, in XSLT 1.0 -, weil die
sum()
- Funktion kann nicht nehmen eine sogenannte result tree fragment als argument. Dein Ansatz sollte nicht "nur html", sollte es tatsächlich nicht.XSLT-Stylesheet
HTML-Ausgabe
<xsl:value-of select="sum(//gt:CashPaymentsToday[number(.) = .])"/>
. Eine ausführlichere Diskussion dieser Tests kann man sich auf stackoverflow.com/questions/3854345/xpath-test-if-is-numberJa, das wäre ein guter Ansatz - aber es ist auch immer undurchsichtiger. Warten wir auf die OP zu klären, ob Sie in der Tat haben mehr Werte, die nicht zahlen.
InformationsquelleAutor Mathias Müller