Hi Jeff, and Peter,
I also got "5" with this code:
xml.elements['/a/d'].size
And then I checked your code like:
xml.elements('/a/d') ,
it failed with message
" in 'elements': wrong number of arguments(1 for 0) (Argument Error) ".
Is it the difference of REXML version??
My REXML is 3.1.2.1.
Regards,
umitanuki
Jeff Wood wrote:
> Peter,
>
> Actually... i don't understand why you got "5" when you did size...
> that was one element.
>
> And yes, an element contains it's children ... but they aren't going
> to be iterated over unless you did something like /a/d/* or something
> like that.
>
> what do you get when you run
>
> count = 0 ; xml.elements( '/a/d' ).each { count += 1 ) ; puts count
>
> ... of course umitanuki's to_a should also simply return an array of 1 length.
>
> j.
>
> On 10/16/05, umitanuki <yasagure / umitanuki.net> wrote:
>
>>Hi Peter,
>>
>>What you want is to get the array of specific nodes, isn't it??
>>If it's true, see code below:
>>
>>xmltest.rb :
>>require 'rexml/document'
>>
>>xmlin = <<EOD
>><a>
>> <b>one</b>
>> <c>two</c>
>> <d>
>> <e>three</e>
>> <f>four</f>
>> </d>
>></a>
>>EOD
>>
>>xml = REXML::Document.new(xmlin)
>>puts xml.elements.to_a('/a/d')
>>
>>--
>>then, you can iterate with the nodes of 'd', including knowing
>>the number of 'd' nodes with '.size' method, right??
>>
>>Regards,
>>
>>
>>umitanuki
>>
>>
>>Peter Fitzgibbons wrote:
>>
>>>HI Jeff,
>>>
>>>xmltest.rb :
>>>require 'rexml/document'
>>>
>>>xmlin = <<EOD
>>><a>
>>> <b>one</b>
>>> <c>two</c>
>>> <d>
>>> <e>three</e>
>>> <f>four</f>
>>> </d>
>>></a>
>>>EOD
>>>
>>>xml = REXML::Document.new(xmlin)
>>>puts xml.elements['/a/d'].size
>>>puts xml.elements['/a/d']
>>>
>>>
>>>output :
>>>5
>>><d>
>>> <e>three</e>
>>> <f>four</f>
>>> </d>
>>>
>>>xml.elements['/a/d'] returns the entire xml tree under/including /a/d
>>>
>>>I want this to return 1 (the number of "d" elements in the list)
>>>
>>>
>>>
>>
>>
>>
>
>
> --
> "http://ruby-lang.org -- do you ruby?"
>
> Jeff Wood
>
>
>