2010-10-13 11 views
11

Nonostante il fatto che gli attributi XML possano essere definiti utilizzando virgolette singole o doppie, il mio utente sta tentando di integrare il mio software con un altro che non accetta valori di attributo citati singolarmente.Ruby converte virgolette singole a virgolette in XML

I utente REXML per generare i miei XML.

Esiste un modo per REXML di generare valori di attributo con doppi valori? Se no, c'è un modo per me di convertirlo facilmente?

Grazie

risposta

19

As of Feb 2007 c'è un modo supportato per determinare il carattere di quotatura. I cambiamenti were merged in fonti Ruby on luglio 2007 e dovrebbero essere disponibili su tutte le versioni dal 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) 

esecuzione che i rendimenti:

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

per tutti coloro che si confonde con il commento di cui sopra come Ho fatto --- devi impostare il valore su ': quote' per ottenere una virgola doppia per essere l'attributo" contenitore ". Mi ha confuso perché ho provato a impostarlo su ': double_quote'. – sameers

2

Ho visto questo codice in giro per farlo. Ma è da un post della mailing list del 2003 che promette anche un modo più elegante (e supportato) di farlo. Potrebbe non essere il migliore, ma potrebbe funzionare, provarlo.

REXML::Attribute.class_eval(%q^ 
    def to_string 
     %Q[#@expanded_name="#{to_s().gsub(/"/, '&quot;')}"] 
    end 
    ^) 
Problemi correlati