[XML-DEV Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: quick XPath question: finding /a/b/c with a default namespace
> /*[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.
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|