require 'csv' require 'nokogiri' xml = File.read('hello.xml') doc = Nokogiri::XML(xml) all_the_things = [] doc.xpath('//file').each do |file| title = file.xpath("./title").first.text filename = file.xpath("./name").first.text identifier = file.xpath("./identifier/*[contains(text(), 'My display ID')]").text secret = file.xpath("./identifier/secret").attr('secret').text all_the_things << [title, filename, identifier, secret] end CSV.open('new_file.csv', 'wb' ) do |row| row << ['title', 'filename', 'identifier', 'secret'] all_the_things.each do |data| row << data end end