Subject: RE: [xsl] Filter nodelist From: "Adam van den Hoven" <list@xxxxxxxxxxxxxxxxxxx> Date: Wed, 27 Nov 2002 13:11:52 -0800 |
Ok so this is a few weeks over old. Assuming that a product node is current, I'd use: count(preceding-sibling::product[@id=current()/@id]) That is, I took the following XML: <products> <product id="A"/> <product id="B"/> <product id="C"/> <product id="B"/> <product id="B"/> <product id="D"/> <product id="E"/> </products> And applied the following transform (essentially the identity transform with this calculation added to the product) <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="node()|@*"> <xsl:copy> <xsl:apply-templates select="*|@*"/> </xsl:copy> </xsl:template> <xsl:template match="product"> <xsl:copy> <xsl:attribute name="previous_same_id_count"> <xsl:value-of select="count(preceding-sibling::product[@id=current()/@id])"/> </xsl:attribute> <xsl:apply-templates select="*|@*"/> </xsl:copy> </xsl:template> </xsl:stylesheet> And got the following result (running from within Stylus Studio) <?xml version='1.0' ?> <products> <product id="A" previous_same_id_count="0"/> <product id="B" previous_same_id_count="0"/> <product id="C" previous_same_id_count="0"/> <product id="B" previous_same_id_count="1"/> <product id="B" previous_same_id_count="2"/> <product id="D" previous_same_id_count="0"/> <product id="E" previous_same_id_count="0"/> </products> Which should be the thing you are looking for. Adam > -----Original Message----- > From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx > [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx] On Behalf Of > Martin Kupisch > Sent: November 7, 2002 3:11 AM > To: XSL-List@xxxxxxxxxxxxxxxxxxxxxx > Subject: [xsl] Filter nodelist > > > Hello everyone, > > I have an XML document that contains a few 'product' elements > with 'id' attributes. Because I have to operate on these > products a few times I build a variable that just takes all > products with the expression 'descendant::product'. Sometimes > I have to iterate over all products. But that is not all I do > with the list. My problem: I have to get the count of all > products from this node-list that have the same id like a > certain product in the list and that's position in the > node-list is lower. Example: > > [product id="A", > product id="B", > product id="C", > product id="B", > product id="B", <- > product id="D", > product id="E"] > > So if I have the product at position 5 the result of the > count should be 2, because of the products at position 2 and > 4 with the same id. > > Any ideas? Thanks. > > > 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 -> |
---|---|---|
RE: [xsl] Filter nodelist, Jarno . Elovirta | Thread | [xsl] methods of converting an xml , Ming Yu |
Re: [xsl] Need TOMCAT 4 plus XALAN , Antonio Gallardo | Date | [xsl] XML programming languages, martin |
Month |