[
Lists Home |
Date Index |
Thread Index
]
#
# is it possible to say in XPath
#
# a//@b
#
# is the above equivalent to:
#
# (a/@b | a//*/@b)
#
Yes. I think the easiest proof of this (using constructs that are allowed in
XPath 2.0 along the way) is
a//@b
means
a/descentant-or-self::node()/@b
which means
a/(descendant::node | self::node())/@b
which means
a/descendant::node()/@b | a/self::node()/@b
which means
a/child::node()/descendant-or-self::node()/@b | a/@b
which means
a/descendant-or-self::node()/child::node()/@b | a/@b
which means (given that nodes other than elements have no attributes)
a//*/@b | a/@b
Of course this assumes some equivalences which I haven't tried to prove
formally, for example that "|" distributes over "/".
Michael Kay
|