REXML::XPath results out of sort order?

Hello,
I need a reality check here,
given this xml : http://rafb.net/paste/results/iziEQI77.html

this test :
mi = XPath.match(@xml, '//HomesiteTree/Builder/Division/Workflow/Milestone')
assert_equal '10', mi[0].elements['MsMilestoneId'].text

fails with :
2) Failure:
test_enrollmentMilestones(EnrollmentTest)
[C:/ruby/dev/BuildviewExtractor/test/functional/enrollment_test.rb:64]:
<"10"> expected but was
<"80">.

Is XPath.match returning results out of order ?

Am I missing something ?

Thanks for your advice.

Peter Fitzgibbons

Peter Fitzgibbons wrote:

Hello,
I need a reality check here,
given this xml : http://rafb.net/paste/results/iziEQI77.html

this test :
mi = XPath.match(@xml, '//HomesiteTree/Builder/Division/Workflow/Milestone')
assert_equal '10', mi[0].elements['MsMilestoneId'].text

fails with :
2) Failure:
test_enrollmentMilestones(EnrollmentTest)
[C:/ruby/dev/BuildviewExtractor/test/functional/enrollment_test.rb:64]:
<"10"> expected but was <"80">.

Is XPath.match returning results out of order ?

Am I missing something ?

Sean has made lots of changes in the later version (see this post):
http://blade.nagaokaut.ac.jp/cgi-bin/vframe.rb/ruby/ruby-talk/154866?154714-156516

My quick test came up empty using this snippet on your data -
   (maybe I got something wrong):

require 'rexml/document'
p REXML::Version #-> "3.1.3"
xml = REXML::Document.new('D:\ruby\DfB\TEMP\clruby\___test.xml')
mi = REXML::XPath.match(xml, '//HomesiteTree/Builder/Division/Workflow/Milestone')

p mi #->

Thanks for your advice.

Peter Fitzgibbons

Hope it's useful ...

daz

Peter Fitzgibbons wrote:
> Hello,
> I need a reality check here,
> given this xml : http://rafb.net/paste/results/iziEQI77.html
>
> this test :
> mi = XPath.match(@xml,
'//HomesiteTree/Builder/Division/Workflow/Milestone')
> assert_equal '10', mi[0].elements['MsMilestoneId'].text
>
> fails with :
> 2) Failure:
> test_enrollmentMilestones(EnrollmentTest)
> [C:/ruby/dev/BuildviewExtractor/test/functional/enrollment_test.rb:64]:
> <"10"> expected but was <"80">.
>
>
> Is XPath.match returning results out of order ?
>
> Am I missing something ?
>

Sean has made lots of changes in the later version (see this post):

http://blade.nagaokaut.ac.jp/cgi-bin/vframe.rb/ruby/ruby-talk/154866?154714-156516

My quick test came up empty using this snippet on your data -
(maybe I got something wrong):

require 'rexml/document'
p REXML::Version #-> "3.1.3"
xml = REXML::Document.new('D:\ruby\DfB\TEMP\clruby\___test.xml')
mi = REXML::XPath.match(xml,
'//HomesiteTree/Builder/Division/Workflow/Milestone')

p mi #->

> Thanks for your advice.
>
> Peter Fitzgibbons

Hope it's useful ...

daz

You have to File.open the file... Document.new doesn't know how to open

the stream.. only how to read it.

please try :

xml = REXML::Document.new(File.open('D:\ruby\DfB\TEMP\clruby\__

···

On 10/21/05, daz <dooby@d10.karoo.co.uk> wrote:

_test.xml') )

Peter Fitzgibbons wrote:

You have to File.open the file... Document.new doesn't know how to open
the stream.. only how to read it.

please try :

xml = REXML::Document.new(File.open('D:\ruby\DfB\TEMP\clruby\___test.xml') )

Gosh, that makes *such* a difference :)) <blush>

I would have known that if I was doing it myself.

Version 3.1.3 gives the correct result:

  p mi[0].elements['MsMilestoneId'].text #-> "10"

daz

installed with one-click 1.8.15

···

On 10/21/05, daz <dooby@d10.karoo.co.uk> wrote:

Peter Fitzgibbons wrote:
>
> You have to File.open the file... Document.new doesn't know how to open
>the stream.. only how to read it.
>
> please try :
>
> xml = REXML::Document.new(File.open('D:\ruby\DfB\TEMP\clruby\___test.xml')
)

Gosh, that makes *such* a difference :)) <blush>

I would have known that if I was doing it myself.

Version 3.1.3 gives the correct result:

p mi[0].elements['MsMilestoneId'].text #-> "10"

daz

How do I find my current REXML version ? I'm using the default lib

So what's different then ?

···

On 10/21/05, Peter Fitzgibbons <peter.fitzgibbons@gmail.com> wrote:

On 10/21/05, daz <dooby@d10.karoo.co.uk> wrote:
>
>
> Peter Fitzgibbons wrote:
> >
> > You have to File.open the file... Document.new doesn't know how to
> open
> >the stream.. only how to read it.
> >
> > please try :
> >
> > xml = REXML::Document.new (File.open('D:\ruby\DfB\TEMP\clruby\___test.xml')
> )
>
>
> Gosh, that makes *such* a difference :)) <blush>
>
> I would have known that if I was doing it myself.
>
>
> Version 3.1.3 gives the correct result:
>
> p mi[0].elements['MsMilestoneId'].text #-> "10"
>
>
> daz
>
>
>
>
> How do I find my current REXML version ? I'm using the default lib
installed with one-click 1.8.15

Oh, yes, I'm using 3.1.3.

Peter Fitzgibbons wrote:

Peter Fitzgibbons wrote:
>
> How do I find my current REXML version ? I'm using the default lib
>installed with one-click 1.8.15

Oh, yes, I'm using 3.1.3.

There's a contradiction, somewhere (?)

"One-click" 1.8.2-15 Stable Release (April 20, 2005) has REXML 3.1.2.1
in Ruby 1.8.2 final (2004-12-25).

require 'rexml/document'
puts 'ruby %s (%s) [%s]' % [RUBY_VERSION, RUBY_RELEASE_DATE, RUBY_PLATFORM]
puts REXML::Version

xml = REXML::Document.new(File.read('D:\ruby\DfB\TEMP\clruby\___test.xml'))
mi = REXML::XPath.match(xml, '//HomesiteTree/Builder/Division/Workflow/Milestone')

mi.each { |e| print ' ', e.elements['MsMilestoneId'].text }; puts

···

#------------------------------------------

#-> ruby 1.8.2 (2004-12-25) [i386-mswin32]
#-> 3.1.2.1
#-> 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 210 220 230 240 270 280 290 10 20

#------------------------------------------

#-> ruby 1.8.3 (2005-07-22) [i386-mswin32]
#-> 3.1.3
#-> 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 210 220 230 240 270 280 290

#------------------------------------------

So what's different then ?

I *know* I'm using 3.1.3 :slight_smile:

It fixes several bugs relating to XPath result ordering.
The REXML tracker is down as I write, otherwise I'd give a link.

If you're sure you're getting incorrect results using 3.1.3,
please submit a bug report to:
http://www.germane-software.com/projects/rexml/

As you can see from my tests - the 2nd result array is in order.

The disorder of the 1st result seems to be different from yours
(first element of <80>) but maybe there's a random factor
associated with the bug in 3.1.2.1 (?)

daz

#-> 3.1.2.1 <http://3.1.2.1>
Yes, this is my result.
I may have to update my system with ruby 1.8.3. On windows. Argh.

···

On 10/21/05, daz <dooby@d10.karoo.co.uk> wrote:

Peter Fitzgibbons wrote:
> Peter Fitzgibbons wrote:
> >
> > How do I find my current REXML version ? I'm using the default lib
> >installed with one-click 1.8.15
>
> Oh, yes, I'm using 3.1.3.

There's a contradiction, somewhere (?)

"One-click" 1.8.2-15 Stable Release (April 20, 2005) has REXML 3.1.2.1<http://3.1.2.1>
in Ruby 1.8.2 final (2004-12-25).

require 'rexml/document'
puts 'ruby %s (%s) [%s]' % [RUBY_VERSION, RUBY_RELEASE_DATE,
RUBY_PLATFORM]
puts REXML::Version

xml = REXML::Document.new(File.read
('D:\ruby\DfB\TEMP\clruby\___test.xml'))
mi = REXML:: XPath.match(xml,
'//HomesiteTree/Builder/Division/Workflow/Milestone')

mi.each { |e| print ' ', e.elements['MsMilestoneId'].text }; puts

#------------------------------------------

#-> ruby 1.8.2 (2004-12-25) [i386-mswin32]
#-> 3.1.2.1 <http://3.1.2.1>
#-> 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 210
220 230 240 270 280 290 10 20

#------------------------------------------

#-> ruby 1.8.3 (2005-07-22) [i386-mswin32]
#-> 3.1.3
#-> 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200
210 220 230 240 270 280 290

#------------------------------------------

> So what's different then ?

I *know* I'm using 3.1.3 :slight_smile:

It fixes several bugs relating to XPath result ordering.
The REXML tracker is down as I write, otherwise I'd give a link.

If you're sure you're getting incorrect results using 3.1.3,
please submit a bug report to:
http://www.germane-software.com/projects/rexml/

As you can see from my tests - the 2nd result array is in order.

The disorder of the 1st result seems to be different from yours
(first element of <80>) but maybe there's a random factor
associated with the bug in 3.1.2.1 <http://3.1.2.1> (?)

daz

#-> ruby 1.8.2 (2004-12-25) [i386-mswin32]

Peter Fitzgibbons wrote:

>
> #-> ruby 1.8.2 (2004-12-25) [i386-mswin32]
> #-> 3.1.2.1

Yes, this is my result.
I may have to update my system with ruby 1.8.3. On windows. Argh.

*Or* you could use the method I referred you to in my first reply
and download REXML 3.1.3, unzip, then change the load path (global $:)
in your script ... full instructions:
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/154866

If you have any questions about it, I'm sure someone here will
be able to help.
REXML is all-ruby ... nothing to compile.

daz

···

On 10/21/05, daz wrote: