[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

Re: [xsl] finding nodes


Subject: Re: [xsl] finding nodes
From: "Vasu Chakkera" <vasucv@xxxxxxxxxxx>
Date: Mon, 24 Jan 2005 14:17:11 -0000

When you define  <xsl:apply-templates select="//campus[@name = $value]"/>
and then define template matching  campus, that means you precisely want to
match the campus with your defined predicate,
 unless you have defined another more generalised apply-templates for
processing all other nodes.

If the behaviour is different for the campus with the predicate you had
defined and for all other campus nodes, then you can do this by the
following ways

 one is use a
<xsl:for-each select ="//campus[@name = $value]>
                            do what u want with this node....
 </xsl:for-each>

or define a template matching campus, with a special mode..
eg,..

<xsl:template match="campus" mode="resident">

do what you want here with your template

</xsl:template>

and apply-templates with the mode .. example
<xsl:apply-templates select="//campus[@name = $value]" mode="resident"/>
So u are defining a special behaviour template for your special campuses...

Try working this way...This should help..
Try to avoid doing the nodeset business unless it is absolutely necessary.

>
>     I appreciate your reply. Prabably I should have been more clear in my
> mail. When I mentioned top-level (school in my case) I didn't exactly mean
> top-level but inside of the top-level element but outside of the actual
> root (student) where my student data is.

That was more like a puzzle .. You actually meant the parent of the context
node???
HTH
Vasu


----- Original Message ----- 
From: <omprakash.v@xxxxxxxxxxxxx>
To: <xsl-list@xxxxxxxxxxxxxxxxxxxxxx>
Sent: Monday, January 24, 2005 1:39 PM
Subject: Re: [xsl] finding nodes


>
>
>
>
>
> Hi Vasu,
>
>     You say I should use
>
> <xsl:apply-templates select="//campus[@name = $value]"/>
>
> and then define the template match = "campus". But
> wouldn't
> <xsl:template match="campus"> match other campus nodes as well. I want
only
> campus nodes having name=$value.
> Would I have to use mode in that case.
>
> I feel using for-each and iterating over a nodeset sounds better though a
> bit complex. I think 'campus' nodes having 'name' attribute would only
> appear at the top-level of the document. Can I just say the below (single
> slash) in that case.
>
> <xsl:variable name="nset">
>  <xsl:copy-of select="/campus[@name = $value]"/>
>  </xsl:variable>
>
> Regards,
> Omprakash.V
>
>
>
>
>
>                       "Vasu Chakkera"
>                       <vasucv@hotmail.         To:
<xsl-list@xxxxxxxxxxxxxxxxxxxxxx>
>                       com>                     cc:      (bcc:
omprakash.v/Polaris)
>                                                Subject: Re: [xsl] finding
nodes
>                       01/24/2005 06:59
>                       PM
>                       Please respond
>                       to xsl-list
>
>
>
>
>
>
> You probably need
> <xsl:apply-templates select="//campus[@name = $value]"/>
>
> and then define the template match = "campus" to do what you want to do
> with
> that node.
>
> I think this should work.
>
> If you needed to store the nodeset in the variable ....
> Firstly you must copy the nodes in to this variable.. using the copy-of...
> <xsl:variable name="nset">
>  <xsl:copy-of select="//campus[@name = $value]"/>
>  </xsl:variable>
>  and then iterate
>
> For iterating, you  need an iteration expression like xsl:for-each to loop
> through the variable. Secondly you need a function like nodeset() that
will
> evaluate your variable to a node list. usually all processors have the
> nodeset functions. check your processor's documentation for how to use
this
> extension function.
> your expression will look like
>
> <xsl:for-each select="xx:nodeset($nset)/">
>    do something to this node......
>   </xsl:for-each>
> If you wanted to print the nodeset that you had stored in the variable,
> then
> you could do
> <xsl:copy-of select="$nset"/>
>  > My context node is elsewhere in the xml file.
> Make sure you definitely want to do this nodeset business. a double slash
> ( //) will get you the campus where ever it is in the document from the
> root
> and doesnt care what your context node is..
> HTH
> Vasu
>
>
> ----- Original Message -----
> From: <omprakash.v@xxxxxxxxxxxxx>
> To: <xsl-list@xxxxxxxxxxxxxxxxxxxxxx>
> Sent: Monday, January 24, 2005 1:04 PM
> Subject: [xsl] finding nodes
>
>
> >
> > Hi,
> >     Iam trying to find the set of nodes having the name attribute
> > = '$something'. But, Iam only being returned an empty set.
> >
> > In my stylesheet I have this:
> >
> > I have $value =' resident'
> >
> >  <xsl:variable name="nset">
> >  <xsl:value-of select="//campus[@name = $value]"/>
> >  </xsl:variable>
> >
> > <xsl:message> nodeset  <xsl:value-of select="$nset"/></xsl:message>
> >
> > I would then like to iterate  over the nodeset returned.
> >
> > But all I get is
> >
> > Message: nodeset
> > Message: nodeset
> >
> > In my xml I have
> >
> > <campus name="resident">
> >      <detail>
> >           <student name="location" type="ps:north"/>
> >           <student name="distance" type="ps:km"/>
> >      </detail>
> > </campus>
> >
> > My context node is elsewhere in the xml file.
> >
> > Regards,
> > Omprakash.V
> >
> >
> >
> >
> > This e-Mail may contain proprietary and confidential information and is
> sent for the intended recipient(s) only.
> > If by an addressing or transmission error this mail has been misdirected
> to you, you are requested to delete this mail immediately.
> > You are also hereby notified that any use, any form of reproduction,
> dissemination, copying, disclosure, modification,
> > distribution and/or publication of this e-mail message, contents or its
> attachment other than by its intended recipient/s is strictly prohibited.
> >
> > Visit Us at http://www.polaris.co.in
>
>
>
>
>
> This e-Mail may contain proprietary and confidential information and is
sent for the intended recipient(s) only.
> If by an addressing or transmission error this mail has been misdirected
to you, you are requested to delete this mail immediately.
> You are also hereby notified that any use, any form of reproduction,
dissemination, copying, disclosure, modification,
> distribution and/or publication of this e-mail message, contents or its
attachment other than by its intended recipient/s is strictly prohibited.
>
> Visit Us at http://www.polaris.co.in


Current Thread
Keywords
xml