Subject: RE: [xsl] How to select specific nodes using xsl:template match or similar? From: "Bhaskar Venkateswaran" <bhaskarji@xxxxxxxxxxx> Date: Tue, 12 Jun 2007 11:34:57 +0000 |
<xsl:for-each select="data"> <xsl:variable name="date" select="@name"/> <xsl:if test="$date >= $startDate and $date <= $endDate"> <xsl:value-of select="$date"/> </xsl:if> </xsl:for-each>
<xsl:for-each select="data[@name >= $startDate and @name <= $endDate]"> <xsl:value-of select="@name"/> </xsl:for-each>
<xsl:template match="data"> <xsl:value-of select="@name"/> </xsl:template>
<xsl:template match="data[@name >= $startDate and @name <= $endDate]"> <xsl:value-of select="@name"/> </xsl:template>
(but this last one can't be used with a conformant 1.0 processor - variables are not allowed in a match pattern).
Don't expect any significant differences in performance (it might be that one processor does one of these better than the others, but another processor might do the opposite).
I am trying to use xsl:for-each-group > method for the first time in an XSL and tried running it > using Xalan
Michael Kay http://www.saxonica.com/
> -----Original Message----- > From: Bhaskar Venkateswaran [mailto:bhaskarji@xxxxxxxxxxx] > Sent: 12 June 2007 12:07 > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Subject: [xsl] How to select specific nodes using > xsl:template match or similar? > > Hi, > > I tried posting twice before but couldn't get the code > inserted - sorry about that. > > Here's is a snippet of an XML I have: > > <?xml version="1.0"?> > <rep> > <data name = "20050102"> > <data name = "AAA"> > </data> > <data name = "BBB"> > </data> > </data> > <data name = "20050103"> > <data name = "AAA"> > </data> > </data> > <data name = "20050104"> > <data name = "BBB"> > </data> > <data name = "CCC"> > </data> > </data> > </rep> > > My objective is to choose all first-level data nodes (i.e, > nodes with names 20050102, 20050103 & 20050104 above) within > a specified range of dates. In other words, what is the best > way to, say, choose only the nodes whose name-value is > between 20050102 and 20050103 (both inclusive). I want to be > able to choose such nodes at the top-level WITHOUT using a > for-each loop. > That is, I don't want to do something like this because here > I am running through all nodes that meet my condition as > opposed to just selecting all such nodes in one query: > > <xsl:variable name="startDate">20050102</xsl:param> > <xsl:variable name="endDate">20050103</xsl:param> > <xsl:template match="rep"> > <xsl:for-each select="data"> > <xsl:variable name="date" select="@name"/> > <xsl:if test="$date >= $startDate and $date <= $endDate"> > <xsl:value-of select="$date"/> > </xsl:if> > </xsl:for-each> > </xsl:template> > > Hope I am clear. Any help/idea is much appreciated. > > Another question: I am trying to use xsl:for-each-group > method for the first time in an XSL and tried running it > using Xalan (C version 1.10.0) with Xerces (C version 2.7.0) > but I get the following warning: > > XSLT Warning: The element xsl:for-each-group is an unknown > XSLT element. > (sample.xsl, line 34, column 71.) > > Does it mean I need to upgrade? > > Thanks, > Bhaskar > > _________________________________________________________________ > Career Aptitude Test. Based on the most scientific MBT Test. > http://ss1.richmedia.in/recurl.asp?pid=64
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] How to select specific no, Michael Kay | Thread | Re: [xsl] How to select specific no, Martin Honnen |
Re: [xsl] How to select specific no, Martin Honnen | Date | Re: [xsl] replace, Charles Ohana |
Month |