XML parsing, block name with minus

Hi!

I'm trying to parse a XML document (MusicXML), I found that here
something about it: http://railstips.org/blog/archives/2008/08/11/parsing-xml-with-ruby/
- I chose Hpricot, but I have a problem: in XML document, which I'm
trying to parse, there are names of blocks with minus sign, for
example <score-partwise>. In Hpricot it should looks something like
this:

xml = File.read(path)
    puts Benchmark.measure {
      doc = Hpricot::XML(xml)
      (doc/:score-partwise).each do |s|
        # here we have s as each score-partwise block
      end
    }

But it throws undefined local variable or method `partwise' for
#<MusicxmlController:0xb6badff4>, becouse in symbols names minus sign
is prohibited. How can I make a symbol name with minus sign?

cheers,
simon

Just use a string instead:

(doc/‘score-partwise’)

Best regards

Peter De Berdt

Szymon Przybył wrote:
[...]

But it throws undefined local variable or method `partwise' for
#<MusicxmlController:0xb6badff4>, becouse in symbols names minus sign
is prohibited. How can I make a symbol name with minus sign?

Well, you can actually have any characters you like in a symbol name.
The :name syntax only works if the symbol name doesn't contain "weird"
characters, but the following syntaxes will work regardless:

:'name-with-weird-characters'
:"name-with-weird-characters-and-#{variable_interpolation}"

...or just use String#to_sym .

We are now well out of Rails territory and into basic Ruby, so further
discussion probably should go to the main Ruby list.

cheers,
simon

Best,