Subject: [xsl] Preceding Axis and Aggregation From: "Simon Shutter" <simon@xxxxxxxxxxx> Date: Mon, 20 Aug 2007 12:38:31 -0700 |
I've been aggregating numbers in XSLT 1.0 using the preceding-sibling:: axis for nodes with the same parent. I now need to aggregate (for a given x) all the values of y1 that preceed the context node even if they have different parents. For this I added another attribute using the preceding:: axis. For my test data it appears to give the output I need. If I am constrained to using an XSLT 1.0 processor is this the right technique? Thanks, Simon --------------------------------------------- Stylesheet --------------------------------------------- <xsl:template match="point"> <xsl:copy> <xsl:copy-of select="@*"/> <xsl:attribute name="y2"> <xsl:value-of select="sum(./@y1|preceding-sibling::point[@x = current()/@x]/@y1)"/> </xsl:attribute> <xsl:attribute name="y3"> <xsl:value-of select="sum(./@y1|preceding::point[@x = current()/@x]/@y1)"/> </xsl:attribute> </xsl:copy> </xsl:template> --------------------------------------------- Input --------------------------------------------- <root id="theroot"> <set id="1"> <point x="1" y1="2" /> <point x="1" y1="3" /> <point x="1" y1="0" /> <point x="1" y1="2" /> <point x="1" y1="2" /> <point x="2" y1="3" /> <point x="2" y1="0" /> <point x="2" y1="2" /> <point x="3" y1="2" /> <point x="3" y1="3" /> <point x="3" y1="1" /> <point x="3" y1="2" /> <point x="3" y1="2" /> </set> <set id="2"> <point x="1" y1="2" /> <point x="1" y1="3" /> <point x="1" y1="0" /> <point x="1" y1="2" /> <point x="2" y1="2" /> <point x="3" y1="2" /> <point x="3" y1="2" /> <point x="3" y1="2" /> </set> <set id="n"> <point x="1" y1="2" /> <point x="1" y1="3" /> <point x="1" y1="2" /> <point x="2" y1="3" /> <point x="2" y1="0" /> <point x="2" y1="2" /> <point x="3" y1="3" /> </set> </root> --------------------------------------------- Output --------------------------------------------- <point x="1" y1="2" y2="2" y3="2" /> <point x="1" y1="3" y2="5" y3="5" /> <point x="1" y1="0" y2="5" y3="5" /> <point x="1" y1="2" y2="7" y3="7" /> <point x="1" y1="2" y2="9" y3="9" /> <point x="2" y1="3" y2="3" y3="3" /> <point x="2" y1="0" y2="3" y3="3" /> <point x="2" y1="2" y2="5" y3="5" /> <point x="3" y1="2" y2="2" y3="2" /> <point x="3" y1="3" y2="5" y3="5" /> <point x="3" y1="1" y2="6" y3="6" /> <point x="3" y1="2" y2="8" y3="8" /> <point x="3" y1="2" y2="10" y3="10" /> <point x="1" y1="2" y2="2" y3="11" /> <point x="1" y1="3" y2="5" y3="14" /> <point x="1" y1="0" y2="5" y3="14" /> <point x="1" y1="2" y2="7" y3="16" /> <point x="2" y1="2" y2="2" y3="7" /> <point x="3" y1="2" y2="2" y3="12" /> <point x="3" y1="2" y2="4" y3="14" /> <point x="3" y1="2" y2="6" y3="16" /> <point x="1" y1="2" y2="2" y3="18" /> <point x="1" y1="3" y2="5" y3="21" /> <point x="1" y1="2" y2="7" y3="23" /> <point x="2" y1="3" y2="3" y3="10" /> <point x="2" y1="0" y2="3" y3="10" /> <point x="2" y1="2" y2="5" y3="12" /> <point x="3" y1="3" y2="3" y3="19" />
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] Selecting First Direct Si, Wasiq Shaikh | Thread | [xsl] Preceding Axis and Aggregatio, Simon Shutter |
RE: [xsl] Selecting First Direct Si, Michael Kay | Date | [xsl] Line endings in Saxon, Adam Schweitzer |
Month |