[XSL-LIST Mailing List Archive Home]
[Reply To This Message]
Re: // expanding to descendant-or-self::node()
Subject: Re: // expanding to descendant-or-self::node()|
From: Evan Lenz <evan@xxxxxxxxxxxx>
Date: Tue, 16 Sep 2008 16:57:40 -0700
Evan Lenz wrote:
Evan Lenz wrote:
Aargh. I should just give up. :-) Against my better judgment, here's one
last try at communicating what I meant to say:
./descendant::*/@* is not the same thing as .//@*
Andrew Welch wrote:
Oops, quick correction. When starting at the document node, there
wouldn't be any attributes. So what I meant to say was that
.//descendant::*/@* is not the same as .//@*.
Not quite. If // was short for /descendant::, then //*/@foo would
still not be equivalent. That's because, in XPath as actually
designed, /descendant::*/@foo isn't the same as //@*. The former
excepts attributes of the context node, whereas //@* also includes
attributes of the context node.
currently // expands to /descendant-or-self::node()/ which is not
one would first think of, but it works consistently without
the following step. And that expansion is at the level of expression
terms not syntax fragments.
one might expect // to expand to descendant:: but descendant:: itself
isn't really an expression, just part of the syntax for an axis
that causes problems..
//foo could have been defined to be /descendant::foo
but you can not define
//@foo to be descendant::@foo as that's a syntax error, wheras
/descendant-or-self::node()/@foo is all foo attributes in the
which is the desired meaning.
similarly any other axis, including child::
//child::foo can't expand to /descendant::child::foo
//@foo and //child:: would both be errors - //@* would need to be
//*/@foo and //child:: doesn't make sense anyway
So, instead, you'd have to write (@* | ./descendant::*/@*). In that
case, the actual definition of // is handy.
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