[Date Prev]
| [Thread Prev]
| [Thread Next]
| [Date Next]
--
[Date Index]
| [Thread Index]
Re: [xml-dev] Concerned about the increasing reliance on XPath
- From: Stephen D Green <stephengreenubl@gmail.com>
- To: Andrew Welch <andrew.j.welch@gmail.com>
- Date: Mon, 9 May 2011 17:16:57 +0100
OK. But here is a newbie to XPath and in this case they
are using XPath with a particular version of .NET and its
built-in XPathNavigator. Are they going to be aware of the
huge difference it might have on the result of evaluating
their XPath expressions against some XML which settings
they use, 1) for defaults (perhaps not under their control)
and 2) for bindings? How do they even do these bindings?
Then what if they upgrade their code to a new version of
.NET.
Presumably this isn't confined to .NET since I'd reckon
any implementation of XPath must have similar challenges.
----
Stephen D Green
On 9 May 2011 17:04, Andrew Welch <andrew.j.welch@gmail.com> wrote:
> On 9 May 2011 16:43, Stephen D Green <stephengreenubl@gmail.com> 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]