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

  • From: Andrew Welch <andrew.j.welch@g...>
  • To: stephengreenubl@g...
  • Date: Mon, 9 May 2011 17:04:19 +0100

On 9 May 2011 16:43, Stephen D Green <stephengreenubl@g...> wrote:
> I tried to think of a way to write the XPath expression so
> it gives the same result whatever the version of XPath
> and it gets rather complex and obscure and not what I'd
> be expecting a non-specialist developer to do or understand
> well enough to be able to maintain it but it does evaluate
> to true whatever the version and maybe (?) whatever the
> namespace bindings
>
> /*[local-name()='a']/@version-id = 0.4

To select a elements in any namespace, that could/should be:

/*:a/@version-id

> What would I have to do to ensure it didn't get the same result
> with another default namespace though? I guess I'd have to
> make the expression even more complex:
>
> /*[local-name()='a'][namespace-uri()='http://example.com']/@version-id = 0.4

You've just stumbled across the big problem with namespaces in xpath -
you have to set up the mappings outside of the xpath itself.

Often the best thing to do is use a prefix (not change the default
namespace) and then its clear in the xpath a namespace is involved.

So in your example you could do:

/a/@version-id.....

along with the default namespace changed to "http://example.com", but
you could just as easily do:

/e:a/@version-id....

and then whoever is looking at the xpath knows they need to have a
look at the mapping for e.


-- 
Andrew Welch
http://andrewjwelch.com


[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index]


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