| 
 
Subject: Re: [xsl] Understanding axis From: Jeni Tennison <jeni@xxxxxxxxxxxxxxxx> Date: Tue, 29 Oct 2002 17:03:17 +0000  | 
Hi Adam,
> I've been learning the use of axis in transformations and I stumbled
> on something that didn't seem to make sense...
>
> local-name( */* )
> local-name( */child::* )
>
> return the same values. I would have thought...
>
> local-name( */child::* )
> local-name( */*/* )
>
> would be the same (which they aren't).
You're right that they aren't. A location path is made up of several
steps, separated by /s. Each step is made up of an axis and a node
test. The default axis, if none is specified explicitly, is child. So:
  */*
is exactly the same as:
  child::*/child::*
> Could somebody help me reason out why it is this way? This seems to
> complicate scenarios where I would only want certain nodes based
> upon their children without changing context. For instance,
> something like:
>
> <xsl:for-each select="*/child::*[local-name()=$v]">
> </xsl:for-each>
>
> read as I only want */* where they have a child named $v.
I think that you want:
  <xsl:for-each select="*/*[*[local-name() = $v]]">
    ...
  </xsl:for-each>
Long version:
  <xsl:for-each select="child::*/child::*[child::*[local-name() = $v]]">
    ...
  </xsl:for-each>
Whenever you say something like "I want X where Y" then you need a
path in the form "X[Y]".
  
Cheers,
Jeni
---
Jeni Tennison
http://www.jenitennison.com/
 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
| Current Thread | 
|---|
  | 
| <- Previous | Index | Next -> | 
|---|---|---|
| Re: [xsl] Understanding axis, David Carlisle | Thread | RE: [xsl] Understanding axis, Allan Jones | 
| Re: [xsl] Understanding axis, David Carlisle | Date | RE: [xsl] Understanding axis, Allan Jones | 
| Month |