Subject: RE: [xsl] matching the first following sibling From: kakridge@xxxxxxxxxxxxx Date: Thu, 22 Jan 2004 11:33:51 -0500 |
Your example didn't provide $productId. You were on the right track, but using this method is much cleaner. <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:key name="total" match="Substance" use="productId"/> <xsl:template match="ProductList"> <xsl:for-each select="Substance[productId[not(. = preceding::productId)]]"> <xsl:sort select="Substance/productId"/> <xsl:value-of select="concat(productId, ': ')"/> <xsl:value-of select="concat(sum(key('total', productId)/num), ' ')"/><br/> </xsl:for-each> </xsl:template> </xsl:stylesheet> -----Original Message----- From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx] On Behalf Of Biying Huang Sent: Thursday, January 22, 2004 10:56 AM To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx Cc: btusdin@xxxxxxxxxxxxxxxx Subject: [xsl] matching the first following sibling Dear All, I have trouble with matching the first following sibling which has a child's value differ from the current one's. I need my output look like this: 3000: 9 5000: 5 4000: 8 But I can only get the first line, 3000 : 9 Here is my xslt: <xsl:template match="ProductList"> <xsl:apply-templates select="Substance[position() = 1 ]" /> </xsl:template> <xsl:template match="Substance"> <xsl:value-of select = "productId"/> : <xsl:value-of select = "sum( num | following-sibling::Substance[productId = $productId ]/num)" /> <!-- now check if there is another unique product, if so, call this template recursively, but this DOES NOT work --> <xsl:apply-templates select="following-sibling::Substance[productId != ./productId and position() = 1 ]" /> </xsl:template> I have this xml data: <ProductList> <Substance> <productId>3000</productId> <num>3</num> </Substance> <Substance> <productId>4000</productId> <num>4</num> </Substance> <Substance> <productId>3000</productId> <num>3</num> </Substance> <Substance> <productId>5000</productId> <num>5</num> </Substance> <Substance> <productId>4000</productId> <num>4</num> </Substance> <Substance> <productId>3000</productId> <num>3</num> </Substance> </ProductList> Thanks in advance for your help. Biying Huang XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] matching the first following , Biying Huang | Thread | RE: [xsl] matching the first follow, Lars Huttar |
[xsl] matching the first following , Biying Huang | Date | RE: RE: [xsl] Linear counting probl, cknell |
Month |