Ruby convert single quotes to double quotes in XML
Asked Answered
D

2

11

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

Denominational answered 13/10, 2010 at 19:57 Comment(0)
G
20

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"/>
$
Gadget answered 15/10, 2010 at 15:24 Comment(1)
For anyone who gets confused by the comment above as I did --- you have to set the value to :quote to get double-quote to be the attribute "container." It confused me because I first tried to set it to :double_quote.Pinwork
P
2

I've seen this code around to do this. But it's from a 2003 mailing list post that also promises a more elegant (and supported) way of doing it. Might not be the best, but it could work, give it a try.

REXML::Attribute.class_eval( %q^
    def to_string
      %Q[#@expanded_name="#{to_s().gsub(/"/, '&quot;')}"]
    end
  ^ )
Pandiculation answered 13/10, 2010 at 21:29 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.