2010-10-13 7 views
11

Malgré le fait que les attributs XML peuvent être définis en utilisant des guillemets simples ou doubles, mon utilisateur essaie d'intégrer mon logiciel avec un autre qui n'accepte pas les valeurs d'attributs entre guillemets simples.Ruby convertit des guillemets simples en guillemets doubles en XML

J'utilise REXML pour générer mes XML.

Existe-t-il un moyen pour REXML de générer des valeurs d'attribut entre guillemets doubles? Sinon, y a-t-il un moyen pour moi de le convertir facilement?

Merci

Répondre

19

As of Feb 2007 Il existe un moyen de déterminer le caractère de citation. Les changements dans les sources were merged Ruby le juil 2007 et devraient être disponibles sur toutes les versions depuis 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) 

Course à rendement:

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

Pour tous ceux qui se confond par le commentaire ci-dessus Je l'ai fait --- vous devez définir la valeur à ': quote' pour obtenir un guillemet double à l'attribut" conteneur ". Cela m'a troublé parce que j'ai d'abord essayé de le mettre à ': double_quote'. – sameers

2

J'ai vu ce code autour de faire cela. Mais c'est à partir d'un mailing list de 2003 qui promet également une façon plus élégante (et supportée) de le faire. Peut-être pas le meilleur, mais ça pourrait marcher, essayer.

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