[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: quick XPath question: finding /a/b/c with a default namespace
- From: David Carlisle <davidc@nag.co.uk>
- To: james_strachan@yahoo.co.uk
- Date: Fri, 27 Jul 2001 12:05:03 +0100
> /*[name()='a']/*[name()='b']/*[name()='c']
>
> is the next best thing, certainly better to /*:a/*:b/*:c as at least it only
> matches elements of the correct name with no prefix (and so must all be in
> the empty namespace or the default xmlns="foo" namespace)
actually it's almost certainly better to use local-name. Using name() in
Xpath always has to be done with great care, and anything using that is
really contrary to the spirit of the Namespace recommendation. name()
allows XSLT to work with pre- namespace documents, and allows some
cosmetic round tripping (preserving namespace prefixes in identity
transforms) but by any reading of the namespace rec a namespace aware
application _should_ treat
<a xmlns="xxx"><b><c/></b></a>
and
<x:a xmlns:x="xxx"><x:b><x:c/></b></a>
as equivalent representations of a document. Any Namespace aware query
should give the same results on both. So you should query for an element
with local name "c" (in any namespace) or the element c in the xxx
namespace, but it's bad form really to search for an element tagged with
the literal name c, which is what name() (more or less) is doing.
David
_____________________________________________________________________
This message has been checked for all known viruses by Star Internet
delivered through the MessageLabs Virus Scanning Service. For further
information visit http://www.star.net.uk/stats.asp or alternatively call
Star Internet for details on the Virus Scanning Service.