Thanks Michael and Martin, for the quick responses!
----Original Message Follows----
From: "Michael Kay" <mike(_at_)saxonica(_dot_)com>
Reply-To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
To: <xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com>
Subject: RE: [xsl] How to select specific nodes using xsl:template match or
similar?
Date: Tue, 12 Jun 2007 12:25:10 +0100
You can rewrite this:
<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>
as this:
<xsl:for-each select="data[(_at_)name >= $startDate and @name <=
$endDate]">
<xsl:value-of select="@name"/>
</xsl:for-each>
or as
<xsl:apply-templates select="data[(_at_)name >= $startDate and @name
<=
$endDate]"/>
<xsl:template match="data">
<xsl:value-of select="@name"/>
</xsl:template>
or even as
<xsl:apply-templates select="data"/>
<xsl:template match="data[(_at_)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
Xalan is an XSLT 1.0 processor. You need a 2.0 processor such as Saxon.
Michael Kay
http://www.saxonica.com/
> -----Original Message-----
> From: Bhaskar Venkateswaran [mailto:bhaskarji(_at_)hotmail(_dot_)com]
> Sent: 12 June 2007 12:07
> To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
> 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
>
>
> --~------------------------------------------------------------------
> XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
> To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
> or e-mail:
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
> --~--
>
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--
_________________________________________________________________
Get Married in 2007. Join Shaadi.com FREE!
http://www.shaadi.com/ptnr.php?ptnr=mhottag
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--