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(/"/, '&quot;')}"]
    end
  ^ )