From: Dennis Edwards Date: 2008-06-08T23:28:46+09:00 Subject: Re: rexml & nested loops I get that part of the syntax - what I don't (or didn't) get is why the two xpath operations I have are referring to the same document - I assumed they would be scoped to only the data passed to the block. On Jun 8, 2:35 am, Robert Klemme wrote: > On 08.06.2008 00:15, Paul Ash wrote: > > > > > I'm a bit of a newbie to Ruby, and to xpath..... and hoping someone here > > can give me the one-liner version of why this is failing. > > > I have an XML structure like: > > > > >     > >     Foo1 > >     > >         > >             foobar1 > >         > >         > >             foobar2 > >         > >     > >     > >     > >     Foo2 > >     > >         > >             foobar3 > >         > >         > >             foobar4 > >         > >     > >     > > > > > And the code > > > doc.each_element('//foo') { |foo| > >  puts "*** Processing #{foo.elements['fooId'].text}" > >  foo.each_element('//subFoo') { |subFoo| > >    puts subFoo.elements["subfooName"].text > >    } > >  } > > > What I was expecting was a nested loop.. but what I get is: > > > doc.each_element('//foo') { |foo| > > > This iterator does what I expect. > > >  foo.each_element('//subFoo') { |subFoo| > > > This iterator seems to give me all instances of subFoo in doc, not just > > in the current instance of foo. > > > I'm sure this i just something about ruby that I don't understand... but > > can someone point me in the right direction? > > No, it's something about XPath that you do not understand. :-)  "//" > means "from the root of the document", so you are iterating all "subfoo" > elements each time.  I can think of two remedies: > > 1. do a single loop with an XPath expression that selects only "subfoo" > below "foo"'s. > > 2. keep your nested loop but change the XPath expression to not start at > the root.  (I believe it should be ".//subfoo".) > > These are the two pages I usually consult when in doubt about XPath > expressions: > > http://www.w3schools.com/xpath/http://www.zvon.org/xxl/XPathTutorial/General/examples.html > > And then there's of course the standard: > > http://www.w3.org/TR/xpath > > Kind regards > >         robert