Next in thread → Next in month →

RE: [xml-dev] Quick question regarding XPath

From
Michael Kay <>
To
'Murali Mani' <>,
Date
2004-02-26T10:47:26
ID
<20040226104718.VLJF15439.mta01-svc.ntlworld.com@Turtle>
Thread
RE: [xml-dev] Quick question regarding XPath
# 
# 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
Next in thread → Next in month →