Ik heb een XML-bestand met getallen erin. In een andere xml (settings.xml) kun je kolommen definieren met een sommetje. Voor iedere regel in de data-xml moet de XSLT dus het sommetje uitrekenen. Het sommetje is gedefinieerd als volgt:
De code, die het daarbij behorende sommetje perfect kan maken, is de volgende:
(De 1 wordt later vervangen door iets om het juiste getal uit de data-xml te trekken).
Het probleem is nu dat deze perfect werkt, maar dan op de verkeerde manier. Als er 5 Operand-nodes zijn, dan zou hij dus 1+1+1+1+1 moeten uitrekenen, maar wat 'ie nu doet (logisch ook) is dat $sumSet aan het einde '11111' is. sum($sumSet) werkt niet, omdat $sumSet bestaat uit 'tree fragments' en niet uit een 'node list'. Hoe kan ik het wel oplossen? De bedoeling is om straks ook geneste expressies toe te staan, zodat een Operator tag als Operand kan dienen
XML:
1
2
3
4
5
6
| <CustomColumn name="Som"> <Operator type="sum"> <Operand type="column">SA_23</Operand> <Operand type="column">SA_19</Operand> </Operator> </CustomColumn> |
De code, die het daarbij behorende sommetje perfect kan maken, is de volgende:
XML:
1
2
3
4
5
6
7
8
9
10
11
| <xsl:template match="Operator[@type='sum']"> <xsl:variable name="sumSet"> <xsl:for-each select="*"> <xsl:apply-templates select="Operand"/> </xsl:for-each> </xsl:variable> <xsl:value-of select="$sumSet"/> </xsl:template> <xsl:template match="Operand">1</xsl:template> |
(De 1 wordt later vervangen door iets om het juiste getal uit de data-xml te trekken).
Het probleem is nu dat deze perfect werkt, maar dan op de verkeerde manier. Als er 5 Operand-nodes zijn, dan zou hij dus 1+1+1+1+1 moeten uitrekenen, maar wat 'ie nu doet (logisch ook) is dat $sumSet aan het einde '11111' is. sum($sumSet) werkt niet, omdat $sumSet bestaat uit 'tree fragments' en niet uit een 'node list'. Hoe kan ik het wel oplossen? De bedoeling is om straks ook geneste expressies toe te staan, zodat een Operator tag als Operand kan dienen