Search code examples
rubyxmlrexml

Ruby XML syntax error


I am trying to evaluate 4 XML files that I create from a mysql database, I want to output the text of those XML field as a pairs of data so I can create a hash. (Ex: "Total Builds, 359") I am pretty sure I am getting a syntax error because of the way I am using the block

Here is what I am trying to do:

  while i < numberOfFiles do
            #create a document
            doc = Document.new(File.new(filenames[i]))
            doc.elements.each("//row/field")
            {
             |e|  ##Syntax error here
             name = e.attributes['name']
             text = e.text
             if name == "Total Builds"
                    puts name + ", " + text
             elsif name == "Successful Builds"
                    puts name + ", " + text
             elsif name == "Failed Builds"
                    puts name + ", " + text
             else
                    puts text.join(",")
             end
            }

I know that the format of this block is wrong, but is there a way to do something similar to this in ruby?

Thanks


Solution

  • I don't see why it would cause a syntax error but you are mixing do end and curly braces. I recommend that you don't, at least not for such a long block.

    Try something like

    doc.elements.each("//row/field") do |element|
      name = element.attributes['name']
      text = element.text
      builds = ["Total Builds", "Successful Builds", "Failed Builds"]
      if builds.include?(name)
        puts name + ", " + text
      else
        puts text.join(",")
      end
    end
    

    Also, while statements like that are not how it's usually done in Ruby. Often it's something like:

    filenames.each do |filename|
      doc = Document.new(File.new(filename))