Evan Lenz wrote:
Andrew Welch wrote:
currently // expands to /descendant-or-self::node()/ which is not owhat
one would first think of, but it works consistently without
depending on
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 step
and
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
document,
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
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.
So, instead, you'd have to write (@* | ./descendant::*/@*). In that
case, the actual definition of // is handy.
Evan
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 .//@*.
Evan
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--