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

Re: [xsl] finding nodes


Subject: Re: [xsl] finding nodes
From: omprakash.v@xxxxxxxxxxxxx
Date: Mon, 24 Jan 2005 19:09:48 +0530

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