Subject: RE: [xsl] Getting the first and last nodes of a sorted nodeset From: "M. David Peterson" <m.david@xxxxxxxxxx> Date: Wed, 7 Apr 2004 13:08:37 -0600 |
Whoa, that's a lot of code to accomplish such a straight forward task. To access the first node in a resulting data set you would simply use [1] next to your XPath selection criteria. To add to that the last node as well then add another criteria next to this one that adds to the mix the last() function that selects that last element in an RTF. This template below accesses the first and last elements within the resulting node set found by selecting the first and last "nd" elements from the resulting node-set of test/nd. The fact that further down in your tree you have an additional test element with nd children is irrelevant given the fact that this element will never contain the first or the last element of the resulting nd data set. Excluding these nodes in your select statement just makes your life easier. So this statement -> select="test/nd[1][last]" will give you just what you need. The second template is what the apply-templates used in the first template will match to given that we used "nd" as the match value for the template. Just format the output as needed within this template and your done. <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="root"> <xsl:apply-templates select="test/nd[1][last()]"/> </xsl:template> <xsl:template match="nd"> <xsl:value-of select="."/><br/> </xsl:template> </xsl:stylesheet> best of luck! <M:D/> -----Original Message----- From: Hansen, John [mailto:John.Hansen@xxxxxxxxxx] Sent: Wednesday, April 07, 2004 11:27 AM To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx Subject: RE: [xsl] Getting the first and last nodes of a sorted nodeset Sorry about that probably FAQ. It turned out to be easy. Here's the solution I just came up with if anyone is interested: <xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'> <xsl:output method='html'/> <xsl:template match="/root"> <html> <xsl:for-each select="//nd"> <xsl:sort select="."/> <!-- <xsl:value-of select="."/><br/> --> <xsl:if test="position()=1"> <xsl:call-template name="get_first"> <xsl:with-param name="f"><xsl:value-of select="."/></xsl:with-param> </xsl:call-template> </xsl:if> </xsl:for-each> </html> </xsl:template> <xsl:template name="get_first"> <xsl:param name="f"></xsl:param> <xsl:for-each select="//nd"> <xsl:sort select="."/> <xsl:if test="position()=last()"> <xsl:call-template name="test_template"> <xsl:with-param name="b"><xsl:value-of select="$f"/></xsl:with-param> <!-- first element --> <xsl:with-param name="c"><xsl:value-of select="."/></xsl:with-param> <!-- last element --> </xsl:call-template> </xsl:if> </xsl:for-each> </xsl:template> <xsl:template name="test_template"> <xsl:param name="b"></xsl:param> <xsl:param name="c"></xsl:param> <xsl:value-of select="$b" /><br/> <xsl:value-of select="$c" /> </xsl:template> </xsl:stylesheet>
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] Getting the first and las, Hansen, John | Thread | RE: [xsl] Getting the first and las, Hansen, John |
RE: [xsl] How to put space between , Pieter Reint Siegers | Date | RE: [xsl] Getting the first and las, Hansen, John |
Month |