>what about: //*[name()='one']/two/@three >shouldn't I be required instead >to do //*[name()='one']/*[name()='two']/@three ?
The reason that two is an acceptable abbreviation for child::two is that XPath 2.5 requires that it be so. This works in your test because your "two" element was not namespaced. You should read about XPath treatment of namespaces in a good XSLT/XPath book (like Doug Tidwell's book) rather than relying solely on the specs. .................David Marston
