[Home] [By Thread] [By Date] [Recent Entries]


# 
# 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






Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member