[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: Finding another element with the same name as the
Hi Jo, > Thankyou so much! This explanation is just wonderful! One thing I am > wondering, with the key option: > > <xsl:apply-templates select="key('branch1-elements', name())" /> > > Is why I don't need name() = name(current() like I do for the other > options? I wondered if you'd wonder that ;) You *can* use name(current()) if you want, it's just that here that has the same effect as just name(). When you use name() without any arguments, it gives you the name (technically the 'expanded name') of the *context node*. The context node is the node that's being looked at *within the XPath* when the expression is being evaluated. The current node, on the other hand, is the node that's being looked at *within the XSLT*. For example, take something like: //branch1/*[name() = name(current())] At the very start, as with all expressions, the context node is set to the current node, so if we're in a template for a branch2 element, then that branch2 element is the context node at the start of the expression. The first part of the path (/) changes the context node to the root node, and as you go through each step the context node changes, to the descendants of the root node, to their branch1 element children, and to their element children. Within the predicate, the context node is one of those children of the branch1 element. So, within the predicate, name() gives the name of one of those elements and you have to use name(current()) to get the name of the current node. On the other hand, in the expression: key('branch1-elements', name()) there's only one step (if you can call it a step): the call to the key. The context node doesn't change within the function call - it's still the current node. So name() gives the name of the current node. Of course, after the call to the key, the context node *is* changed, so if you had a predicate on the key: key('branch1-elements', name())[1] then within the predicate, the context node would be one of the nodes returned by the key. I hope that makes sense, Jeni --- Jeni Tennison http://www.jenitennison.com/ XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|