Re: [xsl] XPath problem with namespace attribute

Subject: Re: [xsl] XPath problem with namespace attribute
From: "Matthew Hailstone" <matthew.hailstone@xxxxxxxxx>
Date: Fri, 5 Sep 2008 10:58:15 -0600
Solved it.

Looks like another option is to put the empty prefix in my XPath.

/One/Two/:Three/:Four/:Five

But is this dependent on a particular API? (Shouldn't be, should it?)

Thanks,
Matthew

On Fri, Sep 5, 2008 at 10:47 AM, Matthew Hailstone
<matthew.hailstone@xxxxxxxxx> wrote:
> Thanks for the replies on this. Let me sum up then:
>
> There is no way to create an XPath query for an empty defined
> namespace as in the original XML.
> (The reason I'm looking for such is that I am working with a vendor
> that uses the "xmlns" "attribute"(but not really attribute), but does
> not specify the namespace prefix.
>
> So, I will need to get the vendor to:
> 1. Specify a namespace prefix
> 2. Change the "xmlns" ""attribute"" to something other than "xmlns"
> 3. Remove the "xmlns" and value from the element altogether
>
> Thoughts?
>
> Thanks,
> Matthew
>
> On Fri, Sep 5, 2008 at 9:58 AM, Michael Kay <mike@xxxxxxxxxxxx> wrote:
>> The xmlns declaration (in XPath terms it's a namespace binding, not an
>> attribute) changes the name of the elements Three, Four, and Five. That
>> means you can't select them under their original names. You need to select
>> them under their namespaced names, which you do by binding a prefix to the
>> namespace and using that prefix in your path expression:
>>
>> /One/Two/n:Three/n:Four/n:Five
>>
>> Just as a bit of advice, you really should assume that a bug in your
>> implementation is the least probable explanation when you get unexpected
>> results. Google for "XPath default namespace" and you will find zillions of
>> references to this usability gotcha.
>>
>> Michael Kay
>> http://www.saxonica.com/
>>
>>> -----Original Message-----
>>> From: Matthew Hailstone [mailto:matthew.hailstone@xxxxxxxxx]
>>> Sent: 05 September 2008 16:50
>>> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
>>> Subject: [xsl] XPath problem with namespace attribute
>>>
>>> All,
>>>
>>> I hope it is ok to post this XPath comment to this list.
>>>
>>> It seems there is a bug in the XPath result when an empty
>>> namespace attribute is used:
>>>
>>> XML:
>>> <?xml version="1.0" encoding="utf-8"?>
>>> <One>
>>>   <Two>
>>>     <Three xmlns="http://www.hailstone.org/";>
>>>       <Four>
>>>           <Five/>
>>>       </Four>
>>>     </Three>
>>>   </Two>
>>> </One>
>>>
>>> XPath:
>>> /One/Two/Three/Four/Five
>>>
>>> Expected Result:
>>> The element "Five" should be returned.
>>>
>>> Result:
>>> Nothing is returned.
>>>
>>> Modifications of element "Three" that fix the problem:
>>>
>>> ...
>>> <Three xmlns:something="http://www.hailstone.org";>
>>> ...
>>>
>>> ...
>>> <Three normalattribute="http://www.hailstone.org";>
>>> ...
>>>
>>> Is this a bug in the XPath implementation?
>>> Is there something something special about the "xmlns"
>>> attribute that I don't know?
>>>
>>> Thoughts?
>>>
>>> Thanks,
>>> Matthew

Current Thread