Search code examples
ruby-on-railsrubyxmlrexml

Ruby convert single quotes to double quotes in XML


Despite the fact that XML attributs can be defined using single or double quotes, my user is trying to integrate my software with another one that will not accept single quoted attribut values.

I user REXML to generate my XMLs.

Is there a way to REXML generate double quoted attribute values? If not, is there a way for me to convert it easily?

Thanks


Solution

  • As of Feb 2007 there's a supported way of determining the quoting character. The changes were merged into Ruby sources on Jul 2007 and should be available on all versions since 1.8.6-p110:

    require 'rexml/document'
    
    doc = REXML::Document.new
    doc.context[:attribute_quote] = :quote  # <-- Set double-quote as the attribute value delimiter
    
    root = doc.add_element('root')
    root.add_attribute('val', '123')
    
    doc.write(STDOUT)
    

    Running that yields:

    $ ruby test.rb
    <root val="123"/>
    $