Trying to pull data out of XML doc using REXML

I am trying to get some info from an XML doc that kinda looks like:

<PUBLICATIONS>
   <PUB>
      <TITLE> ... </TITLE>
      ...
      <AUTHORS>
         <AUTHOR> ... <AUTHOR>
         <AUTHOR> ... <AUTHOR>
      </AUTHORS>
      <KEYWORDS>
         <KEYWORD>...</KEYWORD>
         <KEYWORD>...</KEYWORD>
      </KEYWORDS>
   </PUB>
</PUBLICATIONS>

You get the picture...

I'm trying to write the publication, author list and keyword list to a
database where the authors and keywords are associated with the
publication using a has many thru relationship.

The code below works to put the publication in the database, but will
only write the first author or keyword. I assume I am using REXML
incorrectly, but can't figure out how to fix it.

Thanks for any help you can offer...

oh, and this is running as a rake task

task :toDatabase => :environment do

  require "rexml/document"
  file = File.new("public/xml_files/pubFile2009-09-14.xml")
  doc = REXML::Document.new file
  include REXML

  #root = doc.root

    doc.elements.each('//PUB' ) do |pub|

      thispub = Publication.new(
        :title => pub.elements['TITLE' ].nil? ? nil : pub.elements
['TITLE'].text,
        :abstract => pub.elements['ABSTRACT' ].nil? ? nil :
pub.elements['ABSTRACT'].text,
        :volume => pub.elements['VOLUME' ].nil? ? nil : pub.elements
['VOLUME'].text,
         ...
      )
      thispub.save

      authors = pub.elements['AUTHORS'] rescue nil
      if authors
        xml_author = authors.elements['AUTHOR']
        if xml_author
          xml_author.each do |author|

            if author
              @name = author.to_s
              if @name then
                @nameArr = @name.split(', ')
                thisauth = Author.new(
                  :first_name => @nameArr[1],
                  :last_name => @nameArr[0],
                  :ours => true
              )
              end
            end

            thisauth.save
            thispub.authors << thisauth
          end
        end
      end

      thispub.save

      pub.elements.each('KEYWORDS') do |tag|

       if tag.elements['KEYWORD']
         thiskeyword = Keyword.find_or_create_by_keyword(tag.elements
['KEYWORD'].text)
         thispub.keywords << thiskeyword
        end

      end

      thispub.save
    end

end

Quick tip. Look at Nokogiri before investing much time in parsing with REXML.

http://nokogiri.rubyforge.org/nokogiri/

Besides being faster, the parsing syntax is nicer. Here's some
example code for pulling apart Excel exported XML:

http://github.com/kete/kete/blob/master/lib/workers/excel_based_importer_worker.rb
# starting around line 26

You probably want to look for examples of use of the "at" and "xpath"
methods, too.

Cheers,
Walter