|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: My Difficult counting problem
Tim,
This problem looks harder than it is. There are basically two things you need to solve it: (a) to restate the problem in a way more amenable to XSLT, and (b) apply a little fancy XPath (which you can learn by asking on this list :-). You say "I don't know how loop through the nodes, and keep track of how many occurrences there are up to the given position", which is basically about half right in the way of a solution. I say half since the XSL Way isn't to "loop through" anything, much less to keep track of anything while doing so. Yet the problem is easily solved if you just say "I want my output in the same order as my input [that's easy], and for each foo, I want my output to get a number reflecting how many foos of the same name came before it". In XSLT this logic would be: <xsl:template match="foo"> <xsl:value-of select="count(preceding-sibling::foo[@name=current()/@name]) + 1"/> </xsl:template> Spiffed it up to get more exactly what you want: <xsl:template match="myElement">
<xsl:text>numberOccurrences[] = {</xsl:text>
<xsl:apply-templates/>
<xsl:text>};</xsl:text>
</xsl:template><xsl:template match="foo"> <xsl:variable name="thisname" select="@name"/> <!-- this time we're using a variable just to make the logic a little clearer --> <xsl:if test="preceding-sibling::foo"> <!-- we want a comma unless we're the first foo --> <xsl:text>, </xsl:text> </xsl:if> <xsl:value-of select="count(preceding-sibling::foo[@name=$thisname]) + 1"/> <!-- note we used the variable this time instead of current()/@name --> </xsl:template> You could do the same thing in a single xsl:template if you used an xsl:for-each inside it for the "loop" (which isn't a loop) -- but it would do the same thing. Cheers, Wendell At 05:48 PM 8/22/2002, you wrote: hello, ====================================================================== Wendell Piez mailto:wapiez@xxxxxxxxxxxxxxxx Mulberry Technologies, Inc. http://www.mulberrytech.com 17 West Jefferson Street Direct Phone: 301/315-9635 Suite 207 Phone: 301/315-9631 Rockville, MD 20850 Fax: 301/315-8285 ---------------------------------------------------------------------- Mulberry Technologies: A Consultancy Specializing in SGML and XML ====================================================================== 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
|

Cart








