2010-10-13 4 views
11

Несмотря на то, что атрибуты XML могут быть определены с использованием одинарных или двойных кавычек, мой пользователь пытается интегрировать мое программное обеспечение с другим, которое не будет принимать значения с одиночными кавычками.Ruby конвертирует одиночные кавычки в двойные кавычки в XML

Я использую REXML для создания своих XML.

Есть ли способ REXML генерировать значения с двойными кавычками? Если нет, есть ли способ для меня легко преобразовать его?

Thanks

ответ

19

As of Feb 2007 есть поддерживаемый способ определения символа цитирования. Изменения в were merged источников Руби на июль 2007 и должны быть доступны на всех версиях начиная с 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, что дает:

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

Для тех, кто путается комментарием выше, как Я сделал --- вы должны установить значение ': quote', чтобы получить двойную кавычку как атрибут« контейнер ». Это смутило меня, потому что я сначала попытался установить его на ': double_quote'. – sameers

2

Я видел этот код для этого. Но это из списка рассылки 2003 года, который также обещает более элегантный (и поддерживаемый) способ сделать это. Не может быть лучше, но это может сработать, попробовать.

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