[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] RE: Counting nodes efficiently
> Greetings. > > I've been using Jeni's method from the XSLT FAQ to assign > unique id's to > nodes. In order to speed things up, can anyone think of a way > that I could > store the running totals for the different nodes, rather than > having to > call the count() function repeatedly? A generalized method > would obviously > be the best, so that it could be applied to any arbitrary set > of nodes, > but I don't know if this is even possible. > > <xsl:template match="*"> > <xsl:variable name="name" select="name()" /> > <xsl:element name="{name()}"> > <xsl:attribute name="id"> > <xsl:value-of select="concat($name, '-', > count(preceding::*[name()= $name]) + > count(ancestor::*[name()= $name]))" /> > </xsl:attribute> > <xsl:apply-templates /> > </xsl:element> > </xsl:template> 3 ways: 1. Create a node-set by selecting all the elements you wish to count and numbering them using position(). You can then query into this node-set using the generate-id() function to get the correct number for the element you're processing. This only requies one pass of the data so its quite efficient. 2. Write a SAX Filter in java that numbers the elements on their way into the transform. You can then select this number as if it was already in the data. 3. If you are using saxon, you can substring the value returned from generate-id() after the 'e', as the generated id's take form 'dxxeyy' where d is the document number and e is the element number. cheers andrew XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|