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