Ruby конвертирует одиночные кавычки в двойные кавычки в XML
Несмотря на то, что атрибуты XML могут быть определены с использованием одиночных или двойных кавычек, мой пользователь пытается интегрировать мое программное обеспечение с другим, которое не будет принимать значения с одиночными кавычками.
Пользователь REXML для генерации моих XML файлов.
Есть ли способ для REXML генерировать значения двойных кавычек?
Если нет, есть ли способ легко преобразовать его?
Спасибо
Ответы
Ответ 1
По состоянию на февраль 2007 г. существует поддерживаемый способ определения символа цитирования. Изменения были объединены в Ruby sources в июле 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)
Запуск, который дает:
$ ruby test.rb
<root val="123"/>
$
Ответ 2
Я видел этот код для этого. Но это из списка рассылки 2003, в котором также promises более элегантный (и поддерживаемый) способ сделать это. Не может быть лучшим, но он может работать, попробовать.
REXML::Attribute.class_eval( %q^
def to_string
%Q[#@expanded_name="#{to_s().gsub(/"/, '"')}"]
end
^ )